Hadoop/hbase单机测试环境搭建记录
- 基础设施
操作系统 | CentOS Linux release 7.5.1804 (Core) (vmware虚拟机) |
硬件 | 1核cpu 2G内存 20G硬盘 |
Hadoop版本 | Hadoop2.6.5 |
Hbase | Hbase-1.2.8 |
Java | jdk"1.8.0_151" |
- 安装顺序
- 配置linux免密登录 用于hadoop及hbase启动免认证
- 配置hostname # vi /etc/hosts 修改本机ip 主机名 重启网络或重启系统
- 安装java
- 安装hadoop
- 安装配置Hbase
- 免密登录配置
cd ~ # 进入当前用户目录
ssh-keygen –t rsa # 如有提示 直接按回车生成密钥对
# 如root用户会在/root目录下生成.ssh 文件夹
cat id_rsa.pub >> authorized_keys # 加入授权
(ssh-copy-id –i ~/.ssh/id_rsa.pub [目标机器ip地址/主机名] #授权远程机器登录)
ssh localhost 测试,不需要密码登录即可登录即成功
##########
id_rsa ---- 私钥
id_rsa.pub ---公钥
authorized_keys -----授权登录主机的公钥
known_hosts -----登录过已知的主机
#遇到的问题
Q1: 设置了免密登录ssh还需要输入密码登录
A1: 检查/var/log/secure 日志登录信息
要求:用户所在home目录 、.ssh目录权限必须为700;.ssh/authorized_keys文件权限为600
- Linux java安装
Java8 下载地址 :
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载64位版本jdk-8u191-linux-x64-demos.tar.gz 拷到虚拟机
1)解压至/usr/local目录用于配置环境变量
# tar zxvf jdk-8u151-linux-x64.tar.gz –C /usr/local
2)配置环境变量 vi /etc/profile
# JAVA_HOME
export JAVA_HOME=/usr/local/bin/jdk1.8.0_151
export PATH=$PATH:$JAVA_HOME/bin
3) source /etc/profile 使环境变量生效
测试 java 、javac 、jar 能正常使用即可
- Hadoop安装
Hadoop下载地址 官方提供的镜像站http://www.apache.org/dyn/closer.cgi/hadoop/common
# 下载安装包
cd /usr/local
wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.6.5/hadoop-2.6.5.tar.gz
tar zxvf hadoop-2.6.5.tar.gz
解压进入生成的hadoop-2.6.5目录中
cd hadoop-2.6.5/etc/hadoop
#设置hadoop-env.sh
找到# The java implementation to use.这句话,在下面添加如下内容:
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/java/jdk1.8.0_11
export HADOOP_HOME=/usr/lib/hadoop/hadoop-2.7.4
export PATH=$PATH:/usr/lib/hadoop/hadoop-2.7.4/bin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
执行source /usr/lib/hadoop/hadoop-2.7.4/etc/hadoop/hadoop-env.sh,使得环境变量生效
#配置环境变量 vi /etc/profile
# Hadoop Setting
export HADOOP_HOME=/usr/local/hadoop-2.6.5
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_INSTALL=$HADOOP_HOME
验证是否成功,如下图
# 配置相关XML文件
vim hadoop-2.6.5/etc/hadoop/core-site.xml(hadoop全局配置)
内容如下
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node2:9000</value> ///node2 为配置的主机名
</property>
<property>
<!—用于设置hadoop临时数据目录-->
<name>hadoop.tmp.dir</name>
<value>/root/hadoop/tmp</value>
</property>
</configuration>
vim hadoop-2.6.5/etc/hadoop/hdfs-site.xml(设置保存数据副本数)
<configuration>
<!--指定hdfs保存数据的副本数量-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
# 设置MapReduce
cd /usr/lib/hadoop/hadoop-2.7.4/etc/hadoop
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml(MapReduce的配置)
<configuration>
<!--告诉hadoop以后MapReduce运行在YARN上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
# 设置YARN
vi yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!--nomenodeManager获取数据的方式是shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
# 格式化hdfs文件系统
/usr/local/hadoop-2.6.5/bin/hadoop namenode –format (配置环境变量可直接输hadoop命令)
看到Exiting with status 0 表示格式化成功 如为1 可能为上述xml配置问题
# 启动hadoop(hdfs和yarn)
Hadoop-2.6.5/sbin/start-all.sh 启动start-all.sh
Hadoop-2.6.5/sbin/stop-all.sh 停止服务
# 用jps 查看 jvm进程
使用web查看Hadoop运行状态
http://[master机器ip]:50070
使用web查看集群状态
可能会遇到的问题
Q1:如果你多次进行了hdfs的格式化操作,可能会无法启动datanode,原因是id不一致,一般的解决方法为将namenode clusterID和datanode clusterID改成一样的就行了。修改的文件为/tmp/hadoop-root/dfs/下的name or data文件下的VERSION里的内容
Q2: hadoop fs -ls报“WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable”
A2:以前官网会提供32位的安装包,但目前提供的下载包为64位的,在linux 32位系统下安装后会一直提示错误“WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable ”,但官网又不提供32位系统下的安装包,所以我们只能自己编译打包源码。
大家可以到$HADOOP_HOME/lib/native下,查看文件libhadoop.so.1.0.0,里面会显示Hadoop的位数,官网下载好的显示是64位的,截图如下:
如果你是64位操作系统,可以直接跳到第二步。
在hadoop-2.6.5/etc/hadoop/hadoop-env.sh 中添加
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
source hadoop-env.sh生效
- Hbase安装
此处安装使用hbase-1.2.8版本
下载地址http://hbase.apache.org/downloads.html
下载hbase-1.2.8-bin.tar.gz包
tar zxvf hbase-1.2.8-bin.tar.gz
进入解压后的目录
cd hbase-1.2.8/conf
# 设置基础环境变量
vi hbase-env.sh
添加export JAVA_HOME=/usr/local/bin/jdk1.8.0_151
# 设置全局变量
vi hbase-site.xml
<configuration>
<property>
<name>hbase.tmp.dir</name>
<value>/usr/local/hbase/hbaseData</value>
</property>//hbase临时文件目录
<property>
<name>hbase.rootdir</name>
<value>hdfs://node2:9000/hbase</value>
</property>//在hdfs访问路径
<property>
<name>hbase.zookeeper.quorum</name> <!-- list of zookooper -->
<value>node2</value>
</property>
<property>
<name>hbase.cluster.distributed</name> <!-- 是否分布式部署 -->
<value>true</value>
</property>
</configuration>
# 启动hbase
cd Hbase-1.2.8/bin
./start-hbase.sh
运行成功结果
相关日志在hbase-1.2.8/logs目录
测试 hbase-1.2.8/bin/hbase shell
测试hadoop fs -ls /hbase
Hbase的web界面
http://机器ip:16010 (早期版本端口为60010 。HBASE1.0之后的版本web端访问的接口变更为16010)
- 附录
# hadoop 与Hbase支持版本信息
参考资料
常见问题 :https://www.jianshu.com/p/304c2a53e182
Hadoop官方文档 :http://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/ClusterSetup.html