首页 > 代码库 > hadoop多次搭建后,完整总结(累死宝宝了,搭建了十多遍了)
hadoop多次搭建后,完整总结(累死宝宝了,搭建了十多遍了)
1、安装JDK
1.1上传
运用软件FileZilla,将windows上的jdk压缩包放到linux的root目录下
1.2解压jdk
#创建文件夹
mkdir /usr/java(不要挂在在“/”系统盘下)
#解压
tar -zxvf jdk-7u55-linux-i586.tar.gz -C /usr/java/(提前在/usr/目录下创建一个java的文件夹)
1.3将java添加到环境变量中
vim /etc/profile
#在文件最后添加
export JAVA_HOME=/usr/java/jdk1.7.0_55
export PATH=$PATH:$JAVA_HOME/bin
#刷新配置
source /etc/profile
2、安装Hadoop
2.1上传hadoop安装包
运用软件FileZilla,将windows上的压缩包放到linux的root目录下
2.2解压hadoop安装包
在root目录下
mkdir /cloud
#解压到/cloud/目录下
tar -zxvf hadoop-2.2.0.tar.gz -C /cloud/
2.3修改配置文件(5个)目录 /cloud/hadoop-2.2.0/etc/hadoop
第一个:hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.6
第二个:core-site.xml
<configuration>
<!-- 指定HDFS老大(namenode)的通信地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://northbigpenguin:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/cloud/hadoop-2.2.0/tmp</value>
</property>
</configuration>
第三个:hdfs-site.xml
<configuration>
<!-- 设置hdfs副本数量 -->
<property>
<name>dfs.replication</name>
<value>1</value><!--默认是3个,这里改为一个-->
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/hdfs/data</value>
</property>
</configuration>
第四个:mapred-site.xml.template 需要重命名: mv mapred-site.xml.template mapred-site.xml
<configuration>
<!-- 通知框架MR使用YARN -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--这个必须加载-->
<property>
<name>mapred.job.tracker</name>
<value>northbigpenguin:9001</value>
</property>
</configuration>
第五个:yarn-site.xml
<configuration>
<!-- reducer取数据的方式是mapreduce_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>northbigpenguin</value>
</property>
</configuration>
3、将hadoop添加到环境变量
vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.6
export HADOOP_HOME=/root/cloud/hadoop-2.2.0
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
完成过后部署一下,才能生效
source /etc/profile
4、格式化HDFS(namenode)第一次使用时要格式化
#过时但还可以使用:hadoop namenode -format
目录/cloud/hadoop-2.2.0
hdfs namenode -format 使用这个(注:整个配置中此句子仅仅执行一次,否则会出很多错误)
注意:
(1)如果报错:
-bash: hadoop: command not found
说明:
hadoop的路径配置有误。查看vim /etc/profile的export HADOOP_HOME=/root/cloud/hadoop-2.2.0(使用绝对路径)
不知道绝对路径:
进入/hadoop-2.2.0/bin 然后输入pwd
5、启动hadoop
5.1 初始化HDFS(格式化文件系统)
(1)查找命令:
which hadoop
which hdfs
(2)到hdfs相对的bin目录下:
cd /root/Download/hadoop/hadoop-2.2.0/bin
(3)退到/hadoop-2.2.0所在目录
hdfs namenode -format (hadoop namenode -format(过时了,但是可用))
5.2启动hadoop
(1)进入目录/root/cloud/hadoop-2.2.0/sbin
(2)先启动HDFS(可以用.../sbin/start-all.sh但是需要多次输入密码)
(3)第二种启动方法:
先启动HDFS
../sbin
./start-dfs.sh
再启动YARN
../sbin
./start-yarn.sh
资源无法访问和stop错误都是重启
/data/hdfs/data/current
(2)报错:Error: Cannot find configuration directory:
进入vim /etc/profile
就把所有的路径都配置进去
export JAVA_HOME=/usr/java/jdk1.6
export HADOOP_HOME=/root/cloud/hadoop-2.2.0
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_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH::$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOOME/sbin:$HADOOP_HOME/lib
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
再次配置一下
source /etc/profile
6、然后关闭服务器
./stop-all.sh
重新启动服务:
./start-all.sh
最后出现:
starting yarn daemons
starting resourcemanager, logging to /root/cloud/hadoop-2.2.0/logs/yarn-root-resourcemanager-northbigpenguin.out
localhost: starting nodemanager, logging to /root/cloud/hadoop-2.2.0/logs/yarn-root-nodemanager-northbigpenguin.out
这样的字样就是配置成功
7、验证是否启动成功
(1)数据传输成功验证:
使用jps命令验证
目录/root/cloud/hadoop-2.2.0/sbin
下输入:
jps
出现如下六个的文件为配置成功:
27408 NameNode
28218 Jps
27643 SecondaryNameNode
28066 NodeManager
27803 ResourceManager
27512 DataNode
在主节点执行jps,看到3个进程,分别是NameNode、SecondaryNameNode、JobTracker
在从节点执行jps,看到2个进程,分别是DataNode、TaskTracker
(2)网页测试:
在这个文件中添加linux主机名和IP的映射关系(本机windows系统下)
C:\Windows\System32\drivers\etc\hosts
192.168.1.110(LInux的IP地址) localhost(linux主机名)
访问:northbigpenguin:50070 ((hdfs的web页面)
northbigpenguin:8088 (MR管理界面)
网页测试不显示网页需要关闭防火墙
关闭防火墙
#查看防火墙状态
service iptables status
#关闭防火墙
service iptables stop
#查看防火墙开机启动状态
chkconfig iptables --list
#关闭防火墙开机启动
chkconfig iptables off
注意:
页面访问:
Live Nodes-->Browse the filesystem 需要配置本地连接否则会无法访问
http://northbigpenguin:50075/browseDirectory.jsp?namenodeInfoPort=50070&dir=/&nnaddr=localhostip:9000
点击后跳转到这个界面
页面数据测试:
上传文件到hadoop (文件是临时的,服务器关闭,文件消失):
hadoop fs -put /root/Download/jdk-6u45-linux-x64.bin hdfs://northbigpenguin:9000/jdk
然后在界面可以看到:
http://northbigpenguin:50075/browseDirectory.jsp
命令行下载上传的文件:
hadoop fs -get /root/Download/jdk-6u45-linux-x64.bin hdfs://northbigpenguin:9000/jdk
运行实例
(1)先在本地磁盘建立两个输入文件 file01和file02
$echo "Hello World Bye World" > file01
$echo "Hello Hadoop Goodbye Hadoop" > file02
(2)在hdfs中建立一个input目录:$hadoop fs -mkdir input
(3)将file01和file02拷贝到hdfs中:
$hadoop fs -copyFromLocal /home/zhongping/file0* input
(4)执行wordcount:
$hadoop jar hadoop-0.20.2-examples.jar wordcount input output
(5)完成之后,查看结果
$hadoop fs -cat output/part-r-00000
NameNode
Jps
SecondaryNameNode
NodeManager
ResourceManager
DataNode关系和联系
yarn负责资源的调度
ResourceManager(负责管理)是yarn的上一级
NodeManager(负责干活)(可以是一个,集群时是多个)是yarn的低一级
SecondaryNameNode 是hadoop1.0的解决HA(高可靠性)的方案
SecondaryNameNode不是NameNode的一个热备(namenode坏了SecondaryNameNode不执行)
SecondaryNameNode是NameNode的助理(完成数据同步,但不是实时的)
hdfs
NameNode是hdfs的上一级
DataNode(负责存放数据)是hdfs的下一级
错误:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where
applicable
系统版本不兼容
部署Hadoop的集群环境为? 操作系统 CentOS 5.8??? hadoop版本为cloudera?? hadoop-0.20.2-cdh3u3
集群中设置支持gzip lzo压缩后,在对压缩文件进行读取或者对输入文件压缩的时候要使用到hadoop的本地库,本地库的默认位置在
$HADOOP_HOME/lib/native/Linux-amd64-64?? (64位操作系统)
$HADOOP_HOME/lib/native/Linux-i386-32?? (32位操作系统)
文件夹中的libhadoop.so文件,就是hadoop的本地库。
如果本地库不存在,或者本地库与当前操作系统的版本不一致的时候,会报下面的错误:
11/09/20 17:29:49 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java
classes where applicable
增加调试信息设置
(开启:export HADOOP_ROOT_LOGGER=DEBUG,console
关闭:export HADOOP_ROOT_LOGGER=INFO,console)
$ export HADOOP_ROOT_LOGGER=DEBUG,console
$ hadoop fs -text /test/data/origz/access.log.gz
2012-04-24 15:55:43,269 WARN org.apache.hadoop.util.NativeCodeLoader: Unable to load native-hadoop library for your
platform... using builtin-java classes where applicable error libhadoop.so? /lib64/libc.so.6 required (libc 2.6)???
/usr/local/hadoop/lib/native/Linux-amd64-64?
说明系统中的glibc的版本和libhadoop.so需要的版本不一致导致
查看系统的libc版本?
# ll /lib64/libc.so.6
lrwxrwxrwx 1 root root 11 Apr 24 16:49 /lib64/libc.so.6 -> libc-2.5.so
系统中的版本为2.5 将系统中的glibc升级为2.9
下载glibc wget? http://ftp.gnu.org/gnu/glibc/glibc-2.9.tar.bz2
下载glibc-linuxthreads wget http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.5.tar.bz2
解压 $tar -jxvf glibc-2.9.tar.bz2 $cd glibc-2.9
$tar -jxvf ../glibc-linuxthreads-2.5.tar.bz2
$cd .. $export CFLAGS="-g -O2"
$./glibc-2.7/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include
--with-binutils=/usr/bin
$make
#make install
安装编译过程中需要注意三点:
1、要将glibc-linuxthreads解压到glibc目录下。
2、不能在glibc当前目录下运行configure。
3、加上优化开关,export CFLAGS="-g -O2",否则会出现错误
安装完后,可以查看ls -l /lib/libc.so.6已升级
lrwxrwxrwx 1 root root 11 Apr 24 16:49 /lib64/libc.so.6 -> libc-2.9.so
测试本地库是否升级
$ export HADOOP_ROOT_LOGGER=DEBUG,console
$ hadoop fs -text /test/data/origz/access.log.gz
12/04/25 08:54:47 INFO lzo.LzoCodec: Successfully loaded & initialized native-lzo library [hadoop-lzo rev
6bb1b7f8b9044d8df9b4d2b6641db7658aab3cf8]
12/04/25 08:54:47 DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library...
12/04/25 08:54:47 INFO util.NativeCodeLoader: Loaded the native-hadoop library 12/04/25 08:54:47 INFO zlib.ZlibFactory:
Successfully loaded & initialized native-zlib library
12/04/25 08:54:47 DEBUG fs.FSInputChecker: DFSClient readChunk got seqno 0 offsetInBlock 0 lastPacketInBlock false
packetLen 132100
可以看到将glibc升级后不再报错,已经成功加载本地库
功能练习一:
下载文件命令
hadoop fs -get hdfs://northbigpenguin:9000/jdk1.6 /root/jdk1.6
上传文件命令
hadoop fs -put jdk-6u45-linux-x64.tar hdfs://northbigpenguin:9000/jdk1.6
上传文件需要是rar文件,没有自己创建一个
(1)下载一个jdk。无论什么压缩包,window是本地解压后,打包成.zip文件
(2)将该文件上传到linux系统
(3)系统内解压
unzip jdk-6u45-linux-x64.zip
(4)生成文件夹 jdk-6u45-linux-x64
(5)将该文件夹压缩成tar
tar -cvf jdk-6u45-linux-x64.tar jdk-6u45-linux-x64
(6)上传到linux的hadoop上
(7)下载文件
(8)linux中解压
tar -xzvf jdk1.6
不好使就用
tar -xvf jdk1.6(出现错误用这个)
功能练习二:
统计单词数量的上传文件
进入目录:
/root/cloud/hadoop-2.2.0/share/hadoop/mapreduce
vi wordCount.txt
写入 单词十二个
HELLO WORLD
HELLO BABY
HELLO a
HELLO B
HELLO C
HELLO D
wc wordCount.txt
得到:
6(行) 12(单词数) 55(字符) wordCount.txt
上传到服务器
hadoop fs -put wordCount.txt hdfs://northbigpenguin:9000/wordCount
查看是否上传成功:
hadoop fs -ls hdfs://northbigpenguin:9000/
目录/mapreduce下
执行:
hadoop jar hadoop-mapreduce-examples-2.2.0.jar wordcount hdfs://northbigpenguin:9000/wordCount hdfs://northbigpenguin:9000/Cout
hadoop jar(命令) jar包 命令(统计单词数量) 输入位置 输出位置
Map-Reduce Framework
Map input records=6
Map output records=12
Map output bytes=103
Map output materialized bytes=73
Input split bytes=102
Combine input records=12
Combine output records=7
Reduce input groups=7
Reduce shuffle bytes=73
Reduce input records=7
Reduce output records=7
Spilled Records=14
Shuffled Maps =1
Failed Shuffles=0
Merged Map outputs=1
GC time elapsed (ms)=370
CPU time spent (ms)=3150
Physical memory (bytes) snapshot=315904000
Virtual memory (bytes) snapshot=1650171904
Total committed heap usage (bytes)=136122368
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=55
File Output Format Counters
Bytes Written=39
成功标志
8、配置ssh免登陆
远程创建文件
ssh 10.129.205.237 mkdir /root/xiaobaitu
两台机器都需要配置ssh才能执行远程连接:
(1)基于 RedHat / CentOS 的系统 :
下载安装(完成后会装在root目录下:执行命令ls -a查看隐藏文件.ssh):
# yum install openssh-server openssh-clients
OpenSSH Server安装完成后在/etc/init.d目录下应该会增加一个名为sshd的服务。
chkconfig --list sshd
手动启动sshd服务,方便后面客户端的连接:
$ /etc/init.d/sshd start
(2)方法二:安装SSH:
yum install ssh
启动SSH:
service sshd start
设置开机运行:
chkconfig sshd on
1、创建:
mkdir /root/.ssh
2、生成ssh免登陆密钥
进入到我的home目录
cd ~/.ssh
3、生产密钥
ssh-keygen -t rsa (四个回车)
执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免登陆的机器上
cp id_rsa.pub authorized_keys或者ssh-copy-id northbigpenguin
或者
将公钥拷贝到要免登陆的机器上
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
注意:
公钥必须叫authorized_keys,系统默认的
登录本机不输密码
ssh northbigpenguin
退出登录
exit
查看公钥
cat ~/.ssh
单项连接:
拷贝自己的公钥到其他你想不用密码登录的机器上
ssh-copy-id 10.129.205.237(想要免密码的机器)
想访问别人,就是考自己的密码给别人,反之考别人的密码给自己
此时会弹出对话框
root@10.129.205.237‘s password:
输入对方的密码
会返回:
Now try logging into the machine, with "ssh ‘10.129.205.237‘", and check in:
.ssh/authorized_keys
to make sure we haven‘t added extra keys that you weren‘t expecting.
表示成功
ssh 10.129.205.237 变成别人机器登录
exit退出变回自己机器
双向连接:
互相有对方的公钥
另一台机器的 ssh-keygen -t rsa 生成了id_rsa(私钥)、id_rsa.pub(公钥)外加authorized_keys(第一台机器的公钥)
authorized_keys是设置的别名以防止重复覆盖
所以此时只需 执行
ssh-copy-id 10.129.205.250(另一台机器的ip)
然后输入器确认和密码
Are you sure you want to continue connecting (yes/no)? yes
root@10.129.205.250‘s password:
测试连接:
ssh 10.129.205.250
hadoop多次搭建后,完整总结(累死宝宝了,搭建了十多遍了)