安装hadoop,hbase相关问题

hadoop1.x参考文档:只找到1.0.4的这个版本有中文文档,http://hadoop.apache.org/releases.html显示的2.5.2,2.6.0,2.7.1几个大分支 都没有中文文档。

http://hadoop.apache.org/docs/r1.0.4/cn/quickstart.html

截止目前hadoop最新版本为2.7.1

http://hadoop.apache.org/docs/current/

安装方式官方和网上有很多的教程。

我自然是像从最新版本开始搭建环境的,但是折腾了很长时间,包括linux基础环境问题,centos5.8的各种依赖库版本太低的问题,现将一些碰到的坑和解决方案记录一下,方便日后查看。

一、下载jdk是必要的,下载了.gz格式的如何解压?大家都知道tar.gz 怎么解压 tar zxf。这个需要用二步骤解决:

1.gunzip jdk-8u20-linux-x64.gz  解压后.gz文件被删了,只留下了解压出来的jdk-8u20-linux-x64
2.tar xf jdk-8u20-linux-x64

二、下载hadoop版本问题,如果不想编译源码版本后才能运行hadoop等命令,那就下载已经编译好了的bin版本,叫hadoop-xx.bin.tar.gz学习。但是要注意不同版本的文件夹下情况不一样,有的是源码版本名字带了src的,并列的没有后缀的版本应该就是bin版本。有的源码版本的没带后缀,bin版本带了bin后缀的。如果要确定下载bin版本,简单的区分较大的那个版本一般大几十M不等,源码版本的只有十几M。源码需要用 maven编译,没有的需要线安装。解压源码版本下有pom.xml,编译完成后会生成target文件夹。

例举hbase编译完成后的结果,但是1.x版本貌似编译完成后也会有找不到类的问题,目前还不知道为什么。可能是路径要怎么设置一下。

修正:已找到原因,请参考 : http://blog.pengduncun.com/?p=1251

hadoop-2.7.1的编译安装请参考:http://blog.pengduncun.com/?p=1208

mvn package -Dmaven.test.skip.exec=true

[INFO] Reactor Summary:
[INFO]
[INFO] Apache HBase ………………………………… SUCCESS [06:16 min]
[INFO] Apache HBase – Checkstyle …………………….. SUCCESS [ 31.796 s]
[INFO] Apache HBase – Resource Bundle ………………… SUCCESS [ 0.140 s]
[INFO] Apache HBase – Annotations ……………………. SUCCESS [ 1.482 s]
[INFO] Apache HBase – Common ………………………… SUCCESS [01:30 min]
[INFO] Apache HBase – Protocol ………………………. SUCCESS [ 14.854 s]
[INFO] Apache HBase – Client ………………………… SUCCESS [ 24.302 s]
[INFO] Apache HBase – Hadoop Compatibility ……………. SUCCESS [ 0.272 s]
[INFO] Apache HBase – Hadoop Two Compatibility ………… SUCCESS [ 25.047 s]
[INFO] Apache HBase – Prefix Tree ……………………. SUCCESS [ 1.229 s]
[INFO] Apache HBase – Server ………………………… SUCCESS [04:15 min]
[INFO] Apache HBase – Testing Util …………………… SUCCESS [ 12.377 s]
[INFO] Apache HBase – Thrift ………………………… SUCCESS [ 40.159 s]
[INFO] Apache HBase – Rest ………………………….. SUCCESS [ 2.935 s]
[INFO] Apache HBase – Shell …………………………. SUCCESS [03:53 min]
[INFO] Apache HBase – Integration Tests ………………. SUCCESS [ 9.619 s]
[INFO] Apache HBase – Examples ………………………. SUCCESS [ 1.449 s]
[INFO] Apache HBase – Assembly ………………………. SUCCESS [ 18.380 s]
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 19:01 min
[INFO] Finished at: 2015-09-10T17:55:27+08:00
[INFO] Final Memory: 112M/566M
[INFO] ————————————————————————

如果用src版本运行启动服务,应该会报xx.class not found 。这些class在bin版本的lib下xx.jar包里有,src版本在maven编译后也会再target对应的目录有。用hbase包的编译后的情况说明大概是这样的,hbase启动前一个报HBaseConfTool.class找不到。

[root@chenlong ~]# find / -name HBaseConfTool.java
/usr/local/hbase/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseConfTool.java

[root@chenlong ~]# find / -name HBaseConfTool.class
/usr/local/hbase/hbase-server/target/classes/org/apache/hadoop/hbase/util/HBaseConfTool.class

三、配置文件位置

可能你看了网上各种文章,发现说的都不完全一样。看官方的英文文档又不一样。初学者都是喜欢找一个固定的靠谱的解释。这种情况那你可能要下多个版本对比一下目录结构。比如2.x的配置文件可能在etc/hadoop下,某些sh脚本也放到sbin目录下,整体变得分类更清楚。如果你像从官方找到具体的变更说明,应该去从每个版本的changelog里找。例如:我大概找到了core-site.xml关于数据存储key的变更。

http://hadoop.apache.org/releases.html

http://hadoop.apache.org/docs/r1.0.4/releasenotes.html

http://hadoop.apache.org/docs/r1.2.1/releasenotes.html

HADOOP-6756. Change value of FS_DEFAULT_NAME_KEY from fs.defaultFS to fs.default.name which is a correct name for 0.20 (steffl)

1.x
vim conf/hadoop-env.sh
2.x
vim etc/hadoop/hadoop-env.sh

export JAVA_HOME=/usr/local/jdk1.8.0_20

老版本的主要的几个文件

conf/hadoop-env.sh
conf/core-site.xml
conf/mapred-site.xml
conf/hdfs-site.xml

另外官方文档有个词 asseme that 假设,假定的意思有助于理解它在说啥。

四、启动相关问题

格式化
bin/hadoop namenode -format   如果提示错误,先把数据目录全删了再试试。

默认数据节点
rm -rf /tmp/hadoop-root/dfs/

启动运行各种日志
rm -rf logs/*

当你格式化或者其他命令的的时候可能碰到这样那样的错误,甚至怀疑别人写的博客文章是不是都是瞎扯的,怎么到你这来了就各种错误。这种情况下首先找日志 logs目录下,看不懂,肯定得先百度看结果,不合适再谷歌(如果能翻墙),再不行只有去找官方有个mail list提问 或者找其他方式解决。这一定是一个痛苦的过程。

修改ssh端口号
export HADOOP_SSH_OPTS=”-p 7710″

启动时提示java_home没有设置
修改 146行注释,添加
vim libexec/hadoop-config.sh
export JAVA_HOME=/usr/local/jdk1.8.0_20

//为了启动hadoop不提示验证
ssh-keygen -t rsa
cat .ssh/id_rsa.pub
cp .ssh/id_rsa.pub .ssh/authorized_keys 或者cat 复制追加。

可能start-all.sh启动起来这个错:

15/09/06 21:15:12 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable。

打开调试
export HADOOP_ROOT_LOGGER=DEBUG,console
再启动看看

15/09/06 22:03:53 DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library…
15/09/06 22:03:53 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: no hadoop in java.library.path

说path里没有找到hadoop,你知道在包的lib/native有那个libxx.so

那改一下环境变量。
export HADOOP_OPTS=”-Djava.library.path=$HADOOP_PREFIX/lib/native”
或者
export JAVA_LIBRARY_PATH=$HADOOP_PREFIX/lib/native

我本地/etc/profile是这样的,可能有多余的,yarn是hadoop2.x的一个mapreduce的框架。修改后 source /etc/profile一下。
export HBASE_HOME=/usr/local/hbase
export JAVA_HOME=/usr/local/jdk1.8.0_20
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HBASE_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

#export HADOOP_HOME=”/usr/local/hadoop”
export HADOOP_PREFIX=”/usr/local/hadoop”
#export YARN_CONF_DIR=”/usr/local/hadoop”
export HADOOP_COMMON_LIB_NATIVE_DIR=”$HADOOP_PREFIX/lib/native”
#export HADOOP_OPTS=”-Djava.library.path=$HADOOP_PREFIX/lib/native”
export JAVA_LIBRARY_PATH=$HADOOP_PREFIX/lib/native
export PATH=$HADOOP_PREFIX/bin:$PATH
export PATH=/usr/local/apache-maven-3.3.3/bin:$PATH

再启动找到了hadoop还是报错:
15/09/06 22:02:20 DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library…
15/09/06 22:02:20 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /usr/local/hadoop-2.7.1/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.12′ not found (required by /usr/local/hadoop-2.7.1/lib/native/libhadoop.so.1.0.0)

软件用2.12编译的,系统太低才2.5
[root@localhost hadoop]#  ll /lib64/libc.so.6
lrwxrwxrwx 1 root root 11 Feb 24  2014 /lib64/libc.so.6 -> libc-2.5.so
[root@localhost hadoop]# strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_PRIVATE

[root@localhost hadoop]# rpm -qa |grep glibc
glibc-2.5-118.el5_10.2
glibc-2.5-118.el5_10.2
compat-glibc-2.3.4-2.26
glibc-common-2.5-118.el5_10.2
glibc-headers-2.5-118.el5_10.2
glibc-devel-2.5-118.el5_10.2
compat-glibc-2.3.4-2.26
glibc-devel-2.5-118.el5_10.2
compat-glibc-headers-2.3.4-2.26

升一下glibc吧,网上一找答案,说低内核版本系统升glibc很容易各种崩溃。还是想尝试一下,结果编译的时候,各种因为说明gcc,g++ 等底层lib的版本太低导致的。

2.22
configure: error:
*** These critical programs are missing or too old: as ld compiler
*** Check the INSTALL file for required versions.

2.12
configure: error: assembler too old, .cfi_personality support missing
configure: error: assembler too old, .cfi_personality support missing

最后算了,就是想启动起来就这么难?改用低版本 1.0.4吧,还能读对应的中文文档呢。。。

所有版本在归档这里 http://archive.apache.org

你可能看到官网那个例子 不知道在干啥,官网文档对于新手确实说的不够彻底简单明了。

bin/hadoop jar hadoop-examples-1.0.4.jar grep input output ‘dfs[a-z.]+’

是调用jar包的 grep类把input种的文件作为输入,查找字符串(支持正则表达式)dfs[a-z.] 匹配到的字符串和出现次数。

上面问题大概都解决了,按顺序来一遍。

cd hadoop
hadoop/bin/hadoop namenode -format

hadoop/bin/start-all.sh

haddop/logs/ 5种对应的日志和output文件

hadoop的web监控页面:
NameNode – http://192.168.110.21:50070/
JobTracker – http://192.168.110.21:50030/

高版本带yarn的
ResourceManager – http://192.168.110.21:8088/
MapReduce JobHistory Server – http://192.168.110.21:19888/

jps能看到的进程
15966 NameNode
16260 SecondaryNameNode
16367 JobTracker
16099 DataNode
16501 TaskTracker

hbase的web监控页面:
jps能看到的进程
16982 HMaster
17157 HRegionServer
16910 HQuorumPeer

HMaster

http://192.168.110.21:60010/

regionServer

http://192.168.110.21:60030/

http://192.168.110.23:60030/

http://192.168.110.34:60030/

有时候显示
The RegionServer is initializing!
进入hbase shell 执行sql报错:

ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet

tail -100 logs/hbase-root-master-node1.log
2015-09-07 22:31:12,833 INFO  [master:node1:60000] util.FSUtils: Waiting for dfs to exit safe mode…
2015-09-07 22:31:22,835 INFO  [master:node1:60000] util.FSUtils: Waiting for dfs to exit safe mode…

/usr/local/hadoop/bin/hadoop dfsadmin -safemode get
Safe mode is ON
hadoop这边关掉hdfs的安全模式
[root@node1 ~]# /usr/local/hadoop/bin/hadoop dfsadmin -safemode leave
Safe mode is OFF

装了centos7系统后,各种底层lib版本比较新,直接上最新版本。

关于 Administrator

爱拼才会赢!
此条目发表在 hadoop 分类目录,贴了 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>