文章目录
参考: https://www.imooc.com/learn/881
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/06d1514ffed257cc0761594569c07f76.png)
版本说明
JDK1.7 + hadoop2.7.3 + Hbase-1.2.4 + zookeeper-3.4.9
机器说明
IP | 服务 | 主机名 |
---|---|---|
192.168.56.51 | Hadoop、HBase | yqLinux2 |
192.168.56.60 | zookeeper | colony-1 |
192.168.56.61 | zookeeper | colony-2 |
192.168.56.62 | zookeeper | colony-3 |
下载地址
cdh版本下载地址:http://archive.cloudera.com/cdh5/cdh/5
官网版本下载地址:http://archive.apache.org/dist
本文下载地址:
- hadoop:
http://archive.apache.org/dist/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz - zookeeper:
http://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz - hbase:
http://archive.apache.org/dist/hbase/1.2.4/hbase-1.2.4-bin.tar.gz
推荐直接将下载地址复制到迅雷下载,速度会比浏览器下载快很多。
Hadoop 2.x单节点安装
1、解压hadoop安装包
配置文件路径:hadoop-2.x/etc/hadoop
2、配置 hadoop-env.sh
查看 jdk 环境变量值:
配置hadoop的Java环境:
3、配置文档说明
https://hadoop.apache.org/docs/r2.7.3/
进入单节点设置。
配置文件示例。
配置参数说明文档。
4、配置域名
查看主机名。
查看本机ip地址。
配置主机名指向本机ip。
5、配置core-site.xml
在hadoop根目录创建data/tmp
。mkdir -p data/tmp
<configuration>
<property>
<!-- 文件系统目录地址 -->
<name>fs.defaultFS</name>
<value>hdfs://yqLinux2:9000</value>
</property>
<property>
<!-- 持久化目录地址 -->
<name>hadoop.tmp.dir</name>
<value>/home/bigdata/hadoop-2.x/data/tmp</value>
</property>
</configuration>
6、配置hdfs-site.xml
<configuration>
<property>
<!-- 指定副本数,我们是单节点,所以值为:1 -->
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<!-- 禁用权限检查-->
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
</configuration>
7、启动hadoop
# 进行hsdf数据格式化
[root@yqLinux2 hadoop-2.5.0-cdh5.3.0]# bin/hdfs namenode -format
# 启动 namenode 和 datanode
[root@yqLinux2 hadoop-2.5.0-cdh5.3.0]# sbin/hadoop-daemon.sh start namenode
[root@yqLinux2 hadoop-2.5.0-cdh5.3.0]# sbin/hadoop-daemon.sh start datanode
# 停止 namenode 和 datanode
[root@yqLinux2 hadoop-2.5.0-cdh5.3.0]# sbin/hadoop-daemon.sh stop namenode
[root@yqLinux2 hadoop-2.5.0-cdh5.3.0]# sbin/hadoop-daemon.sh stop datanode
查看hadoop进程。
8、进入hadoop管理页面
配置windows hosts:(C:\Windows\System32\drivers\etc\)
192.168.56.51 yqLinux2
hadoop默认端口是:50070
地址:http://yqlinux2:50070 或 http://192.168.56.51:50070
会自动跳转到:http://yqlinux2:50070/dfshealth.html#tab-overview
Zookeeper 3.4.9集群安装
首先解压zookeeper安装包。
配置文件路径:zookeeper-3.4.9/conf
1、集群地址和主机名
参考机器说明。
2、配置说明文档
http://zookeeper.apache.org/doc/r3.4.9/
zoo.cfg
配置示例。
3、三台集群机器分别配置域名
4、配置 zoo.cfg
第一步:将 zoo_sample.cfg
重命名为:zoo.cfg
第二步:在zookeeper根目录创建zkData
文件夹。
[root@colony-1 zookeeper-3.4.5-cdh5.10.0]# mkdir -p zkData
第三步:打开zoo.cfg
文件进行配置
# 数据目录地址
dataDir=/home/bigdata/zookeeper-3.4.9/zkData
server.1=colony-1:2888:3888
server.2=colony-2:2888:3888
server.3=colony-3:2888:3888
5、配置myid
表单server.X的条目列出构成ZooKeeper服务的服务器。当服务器启动时,它通过在数据目录中查找文件myid来知道它是哪个服务器 。该文件包含服务器编号,ASCII格式。
所以需要在zkData
目录下创建myid
文件。[root@colony-1 zkData]# touch myid
1表示第一台服务器编号。
6、将配置好的zookeeper文件夹分发到其他集群机器
[root@colony-1 bigdata]# scp -r zookeeper-3.4.9/ colony-2:/home/bigdata
7、修改服务器编号
分别修改第二台和第三台服务器编号。
8、三台集群机器分别启动zookeeper服务
# 在zookeeper根目录运行
[root@colony-2 zookeeper-3.4.5-cdh5.10.0]# bin/zkServer.sh start
HBase 1.2.4安装
解压Hbase安装包。
官方说明文档地址:http://hbase.apache.org/book.html#quickstart
配置文件路径:hbase-1.2.4/conf
1、配置hbase-env.sh
export JAVA_HOME=/usr/local/src/mysql/java/jdk1.7.0_75
export HBASE_MANAGES_ZK=false
2、配置hbase-site.xml
官方配置示例。
在hbase
根目录创建/data/tmp
文件夹。
<configuration>
<property>
<name>hbase.tmp.dir</name>
<value>/home/bigdata/hbase-1.2.4/data/tmp</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://yqLinux2:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<!-- zookeeper配置-->
<name>hbase.zookeeper.quorum</name>
<value>colony-1,colony-2,colony-3</value>
</property>
</configuration>
3、配置regionservers
本机主机名。
yqLinux2
4、启动hbase服务
# 在 hbase根目录运行
[root@yqLinux2 hbase-0.98.6-cdh5.3.0]# bin/start-hbase.sh
hbase服务的两个进程。
5、进入hbase管理页面
HBase1.0之后的版本web端访问的接口变更为16010。
地址:http://yqlinux2:16010或 http://192.168.56.51:16010
会自动跳转到:http://yqlinux2:16010/master-status
HBase Shell 操作Hbase数据库
要访问HBase shell,必须导航进入到HBase的主文件夹。
#进入shell
/bin/hbase shell
#列出HBase的所有表。
hbase(main):001:0> list
TABLE
Java API 操作Hbase数据库
首先创建一个Maven工程。
1、在 resources
目录下创建 hbase-site.xml
、 log4j.properties
文件
hbase-site.xml:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hbase.tmp.dir</name>
<value>/home/bigdata/hbase-1.2.4/data/tmp</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://yqLinux2:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<!-- zookeeper配置-->
<name>hbase.zookeeper.quorum</name>
<value>192.168.56.60,192.168.56.61,192.168.56.62</value>
</property>
</configuration>
log4j.properties:
log4j.rootLogger=INFO, stdout
# MyBatis logging configuration...
.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
2、导入依赖
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
3、下载 winutils
http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe
创建文件夹:C:\hadoop\bin
将 winutils.exe
文件放到 bin
文件夹中。
需要在代码中添加:System.setProperty("hadoop.home.dir", "C:\\hadoop\\");
4、编写代码
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Table;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class HbaseTest {
// 用hbaseconfiguration初始化配置信息时会自动加载当前应用classpath下的hbase-site.xml
public static Configuration configuration = HBaseConfiguration.create();
public Connection connection;
public Table table;
public Admin admin;
@Before
public void before() throws Exception {
System.setProperty("hadoop.home.dir", "C:\\hadoop\\");
// System.setProperty("zookeeper.client.sasl","false");
// 对connection初始化
connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
}
@After
public void after() throws Exception{
cleanUp();
}
// 关闭连接
public void cleanUp() throws Exception {
connection.close();
}
@Test
// 创建表
public void createTable() throws Exception {
String tableName = "hbaseTest";
String[] cf1 = {"i", "j"};
// 获取admin对象
Admin admin = connection.getAdmin();
// 创建TableName对象描述表的名称信息
TableName tname = TableName.valueOf(tableName);
// 创建HTableDescriptor对象,描述表信息
HTableDescriptor tDescriptor = new HTableDescriptor(tname);
// 判断是否表已存在
if (admin.tableExists(tname)) {
System.out.println("表" + tableName + "已存在");
return;
}
// 添加表列簇信息
for (String cf : cf1) {
HColumnDescriptor famliy = new HColumnDescriptor(cf);
tDescriptor.addFamily(famliy);
}
// 调用admin的createtable方法创建表
admin.createTable(tDescriptor);
System.out.println("表" + tableName + "创建成功");
}
}
遇到的问题
问题1
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
问题1解决
不能加载Hadoop包,可能是Windows缺少这个winutils的文件。
一篇网上比较不错的解决方案。
具体如下:
- 1、Download winutils.exe from http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe.
Also, be sure to download the correct winutils.exe based on the version of hadoop that spark is compiled for (so, not necessarily the link above) - 2、create a folder c:\hadoop\bin
- 3、add Download winutils.exe to the c:\hadoop\bin.
- 4、Set environment variable HADOOP_HOME to C:\hadoop.warning!set HADOOP_HOME to hadoop folder instead of the bin folder.
OR,System.setProperty(“hadoop.home.dir”, “C:\hadoop”) in your code.
问题2(zookeeper SASL 认证错误排除)
参考:https://blog.csdn.net/yangguorong123456/article/details/79608675