centos7搭建完全分布式HDFS Hbase Flink
一、安装环境
操作系统:
CentOS7.2.1511
hadoop版本:
2.8.5
节点信息:
Namenode 192.168.0.33
Datanode 192.138.0.185
Datanode 192.168.0.193
二、安装jdk
安装jdk8,注意:hadoop2.x,必须是jdk8
打开/etc/profile,在文件最后面添加如下内容
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
最后,source /etc/profile
三、设置/etc/host
192.168.0.33 hadoop-namenode
192.168.0.185 hadoop-datanode-1
192.168.0.193 hadoop-datanode-2
四、配置密钥对,可以免密执行。
生成SSH KEY并将其拷贝到各个节点主机上
依次执行如下命令:
ssh-keygen
ssh-copy-id localhost #免密钥登录本机
ssh-copy-id hadoop-datanode-1
ssh-copy-id hadoop-datanode-2
五、安装hadoop(三个节点都配置)
#下载2.8.5版本hadoopcurl -O
#安装到/usr/hadoop目录
tar zxvf hadoop-2.8.5.tar.gz -C /usr/hadoop --strip-components 1
1、配置环境变量
export HADOOP_HOME=/usr/hadoop
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
source ~/.bashrc
2、配置datenode文件目录(三个节点都配置)
cd /usr/hadoop/
mkdir datanode
3、配置hdfs(三个节点都配置)
打开~/etc/hadoop/hdfs-site.xml文件,在 - 之间添加如下内容:
<property>
<name>dfs.replication</name>
<value>2</value>
<description>副本个数,默认是3,应小于datanode机器数量</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/hadoop/datanode</value>
<description>datanode上数据块的物理存储位置</description>
</property>
4、主节点增加内容(只有namenode节点)
在namenode节点,打开~/etc/hadoop/hdfs-site.xml文件,新增如下内容:
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/hadoop/datanode/name</value>
<description>namenode上存储hdfs名字空间元数据 </description>
</property>
5、配置hadoo core(三个节点都配置)
打开~/etc/hadoop/core-site.xml文件,在 - 之间添加如下内容:
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-namenode:9000/</value>
</property>
6、在hadoop中设置JAVA_HOME环境变量(三个节点都配置)
首先通过如下命令在本机修改hadoop-env.sh文件中的环境变量:
sed -i -e 's/\${JAVA_HOME}/\/usr\/java\/default/' hadoop-env.sh
7、配置map-reduce(只在namenode节点配置)
打开~/etc/hadoop/mapred-site.xml文件,新增如下内容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>指定mapreduce使用yarn框架</description>
</property>
</configuration>
8、配置yarn(三个节点都配置)
首先打开~/etc/hadoop/yarn-site.xml文件,在 - 之间添加如下内容:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-namenode</value>
<description>指定resourcemanager所在的hostname</description>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序</description>
</property>
9、配置slave
打开etc/hadoop/slaves文件,添加如下内容:
hadoop-namenode
hadoop-datanode-1
hadoop-datanode-2
10、在Namenode上运行如下命令,分别启动hdfs和yarn服务
初始化:hdfs namenode -format
start-dfs.sh
start-yarn.sh
11、验证
在Namenode上运行jps命令,应该会看到如下进程
NameNode
SecondaryNameNode
NodeManager
DataNode
ResourceManager
Jps
在Datanode上运行jps命令,应该会看到如下进程:
NodeManager
Jps
DataNode
12、web界面
192.168.1.182:50070
192.168.1.182:8088
总结:
安装步骤
1、配置jdk
2、配置ssh
3、安装hadoop
4、配置hfds-site.xml,注意,主节点比其他节点多内容。
5、配置core-site.xml,三个节点都配置
6、配置yarn-site.xml,三个节点都配置
7、配置mapred-site.xml,主节点配置
错误:
错误1:
多次format导致id识别失败
处理方法:删除datanode目录,或者重命名目录。
重命名了一下各个数据节点DataNode
启动命令:
(2) 格式化 HDFS
Bin/hdfs namenode -format
格式化是对 HDFS这个分布式文件系统中的 DataNode 进行分块,统计所有分块后的初始元数据的存储在namenode中。(如果服务器再次启动,也需要进行这步,否则启动可能会失败)
(3)启动 NameNode
Sbin/hadoop-daemon.sh start namenode
(4) 启动 DataNode
Sbin /hadoop-daemon.sh start datanode
(5) 启动 SecondaryNameNode
Sbin/hadoop-daemon.sh start secondarynamenode
Hbase 安装 参考
https://blog.csdn.net/ily666666/article/details/83052299
版本:hbase-2.2.5-bin.tar.gz
几台都一样
解压hadoop并配置环境变量
切换到/usr/local/目录下,执行命令
tar -zxvf hbase-2.0.2.tar.gz
解压完成后,配置环境变量
vi /etc/profile
在末尾加入以下内容
export HBASE_HOME=/usr/local/hbase-2.0.2
export PATH=$PATH:$HBASE_HOME/bin:/$HBASE_HOME/sbin
4修改hadoop中的一系列配置文件
执行命令 cd /usr/local/hbase-2.0.2/conf/ 切换到配置文件目录
4.1配置hbase-env.sh文件
执行命令vi hbase-env.sh
修改以下内容,并取消原文注释(#)
export JAVA_HOME=/usr/local/jdk1.8.0_181/
export HBASE_CLASSPATH=/usr/local/hadoop-2.8.3/etc/hadoop
export HBASE_MANAGES_ZK=false
export TZ="Asia/Shanghai"
4.2配置hbase-site.xml文件
执行命令 vi hbase-site.xml
在<configuration></configuration>节点内加入配置:
注:文章中的mini1,mini2,mini3请修改为自己的主机名或者ip地址
<property> <!--RegionServer 的共享目录,用来持久化 Hbase-->
<name>hbase.rootdir</name>
<!– 如果要指定HDFS上的目录,端口号要与hdfs-site.xml中设为一致-->
<value>hdfs://mini1:9000/hbase</value>
</property>
<property> <!--启用分布式集群-->
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property> <!--默认HMaster HTTP访问端口-->
<name>hbase.master.info.port</name>
<value>16010</value>
</property>
<property> <!--默认HRegionServer HTTP访问端口-->
<name>hbase.regionserver.info.port</name>
<value>16030</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>mini1:2181,mini2:2181,mini3:2181</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/hbase-2.0.2/tmp/zk/data</value>
</property>
<property>
<name>hbase.coprocessor.abortonerror</name>
<value>false</value>
</property>
4.3配置regionservers文件
执行命令 vi regionservers
添加以下内容(即hadoop中配置的两个datanode的主机名)
注:文章中的mini1,mini2,mini3请修改为自己的主机名或者ip地址
将hbase传输至其他虚拟机
注:文章中的mini1,mini2,mini3请修改为自己的主机名或者ip地址
scp -r /usr/local/hbase-2.0.2 root@mini2:/usr/local/
scp -r /usr/local/hbase-2.0.2 root@mini3:/usr/local/
6为另外两台虚拟机配置hbase的环境变量
参考3中的配置方法
记得执行 source /etc/profile 使环境变量生效
7启动hbase
注:在启动hbase前,先启动zookeeper和hadoop
在master机器上(mini1)执行命令
start-hbase.sh
如果要关闭hbase ,可以执行命令stop-hbase.sh
8测试hbase
打开浏览器(不要用IE或者Edge建议谷歌浏览器或火狐浏览器)
通过下面的链接来测试,如果不行可以关闭linux防火墙再试一次
注:文章中的mini1,mini2,mini3请修改为自己的主机名或者ip地址
http://mini1:16010/master-status
http://mini2:16030/rs-status
踩坑记录
1.如果hbase logs报 File /input/data.txt._COPYING_ could only be replicated to 0 nodes instead of minReplication
解决方案:
看它的报错信息好像是节点没有启动,但是我的节点都启动起来了,使用jps也能查看到节点信息。
使用hadoop dfsadmin -report命令查看磁盘使用情况,发现出现以下问题:
Configured Capacity: 0 (0 B)Present Capacity: 0 (0 B)DFS Remaining: 0 (0 B)DFS Used: 0 (0 B)DFS Used%: NaN%Under replicated blocks: 0Blocks with corrupt replicas: 0Missing blocks: 0-------------------------------------------------Datanodes available: 0 (0 total, 0 dead)
节点下存储空间都是空的,问题应该就是出现在这了。
查阅资料发现造成这个问题的原因可能是使用hadoop namenode -format格式化时格式化了多次造成那么spaceID不一致,解决方案:
1、停止集群(切换到/sbin目录下)
stop-all.sh
2、删除在hdfs中配置的data目录(即在core-site.xml中配置的hadoop.tmp.dir对应文件件)下面的所有数据;
rm -rf /root/training/hadoop-2.7.3/tmp
3、重新格式化namenode(切换到hadoop目录下的bin目录下)
hdfs namenode -format
4、重新启动hadoop集群(切换到hadoop目录下的sbin目录下)
start-all.sh
2. 如果报SLF4J: Class path contains multiple SLF4J bindings. 错误:
修改hbase项目下//conf/hbase-env.sh这个文件.添加下面这行
看key名字就应该能明白:Hbase禁用查找Hadoop的Classs=True
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=true
Flink配置
第一步下载 flink 最好带hadoop包的,注意对应的安装的hadoop版本
如果几台服务器都跑,只需要配置 flink下面的master 与slaves填写对应主机 几台服务器都scp一份
在 cat /etc/profile 文件加入:
export HADOOP_CONF_DIR=/home/hadoop/hadoop/etc/hadoop #hadoop的路径
启动方式有几种
见:https://blog.csdn.net/oqzuser12345678999q/article/details/107656051
如果运行报内容太小在 hadoop的yar-site.xml加入
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>