设为首页 加入收藏

TOP

hadoop通过压缩包方式安装
2018-12-22 12:33:50 】 浏览:15
Tags:hadoop 通过 压缩 方式 安装
Apache hadoop官网上的版本目前列举如下:
  • 1.1.X - current stable version, 1.1 release
  • 1.2.X - current beta version, 1.2 release
  • 2.X.X - current alpha version
  • 0.23.X - simmilar to 2.X.X but missing NN HA.
  • 0.22.X - does not include security
  • 0.20.203.X - old legacy stable version
  • 0.20.X - old legacy version

所以选定的版本是1.1.x的具体是

hadoop-1.1.2/

环境说明

一共使用了三台机器,说明如下:

IP

用途

192.168.1.100

Master,NameNode,JobTracker

192.168.1.101

Slave1,DataNode,TaskTracker

192.168.1.102

Slave2, DataNode,TaskTracker

安装JDK

省略

创建用户及组

创建用户hadoop 及组 hadoop

SSH配置

三台机器已经安装好了SSH,需要配置ssh无密码公钥认证登录.

在master主机上生成密钥与公钥。命令为 ssh-keygen –t rsa 一路回车,注意,在提示输入加密短语的时候,一定不能输入字符。会在~.ssh下生成id_rsa和id_rsa.pub文件,将id_rsa.pub文 件传到slave机器上,追加到 ~.ssh/authorized_keys 文件里,如果authorized_keys文件没有,可以手动创建。

authorized_keys权限为744就行了。

安装hadoop

hadoop有两种安装方式,一种是rpm包的安装,使用rpm –ivh hadoop.rpm就行了。

另外一种是使用gz.tar包解压安装。本文使用这种安装方式。

解压:tar –zxvf hadoop-1.1.2.tar.gz

为了方便,使用hadoop命令或者start-all.sh等命令,修改Master上/etc/profile 新增以下内容:
export HADOOP_HOME=/home/hadoop/hadoop-0.20.203
exportPATH=$PATH:$HADOOP_HOME/bin
修改完毕后,执行source /etc/profile 来使其生效。

测试安装:bin/hadoop jar hadoop-examples-1.1.2.jar wordcountconf/ /tmp/out

集群配置

配置文件:conf/core-site.xml

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://namenode1:49000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop_home/var</value>
</property>
</configuration>

1)fs.default.name是NameNode的URI。hdfs://主机名:端口/
2)hadoop.tmp.dir :Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可。不过 如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。

配置文件:conf/mapred-site.xml

<xmlversion="1.0">
<xml-stylesheettype="text/xsl"href="configuration.xsl">
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>node1:49001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/home/hadoop/hadoop_home/var</value>
</property>
</configuration>

1)mapred.job.tracker是JobTracker的主机(或者IP)和端口。主机:端口。

配置文件:conf/hdfs-site.xml

<xmlversion="1.0">
<xml-stylesheettype="text/xsl"href="configuration.xsl">
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/hadoop_home/name1, /home/hadoop/hadoop_home/name2</value>#hadoop的name目录路径
<description> </description>
</property>
<property>
<name>dfs.data.dir</name>
<value> /home/hadoop/hadoop_home/data1,,/home/hadoop/hadoop_home/data2</value>
<description> </description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>

1) dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。 当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。
2) dfs.data.dir是DataNode存放块数据的本地文件系统路径,逗号分割的列表。当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
3) dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。

注意:此处的name1、name2、data1、data2目录不能预先创建,hadoop格式化时会自动创建,如果预先创建反而会有问题。

配置masters和slaves主从结点

配置conf/masters和conf/slaves来设置主从结点,注意最好使用主机名,并且保证机器之间通过主机名可以互相访问,每个主机名一行。

vi masters:
输入:

node1

vi slaves:

输入:
node2
node3

配置结束,把配置好的hadoop文件夹拷贝到其他集群的机器中,并且保证上面的配置对于其他机器而言正确,例如:如果其他机器的Java安装路径不一样,要修改conf/hadoop-env.sh

hadoop启动

先格式化一个新的分布式文件系统,运行命令/bin/hadoop namenode -format

13/06/04 11:44:03 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = node1/127.0.0.2
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.1.2
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.1 -r 1440782; compiled by 'hortonfo' on Thu Jan 3102:03:24 UTC 2013
************************************************************/
Re-format filesystem in /home/hadoop/hadoop_home/name1 (Y or N) y
Format aborted in /home/hadoop/hadoop_home/name1
13/06/04 11:44:07 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at node1/127.0.0.2
************************************************************/

查看输出保证分布式文件系统格式化成功
执行完后可以到master机器上看到/home/hadoop//name1和/home/hadoop//name2两个目录。在主节点master上面启动hadoop,主节点会启动所有从节点的hadoop。

启动所有节点

启动方式1

$ bin/start-all.sh (同时启动HDFS和Map/Reduce)

启动方式2

启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。

在分配的NameNode上,运行下面的命令启动HDFS:
$ bin/start-dfs.sh(单独启动HDFS集群)

bin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。

在分配的JobTracker上,运行下面的命令启动Map/Reduce:
$bin/start-mapred.sh (单独启动Map/Reduce)

bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。

关闭所有节点

从主节点master关闭hadoop,主节点会关闭所有从节点的hadoop。

$ bin/stop-all.sh

Hadoop守护进程的日志写入到 ${HADOOP_LOG_DIR} 目录 (默认是 ${HADOOP_HOME}/logs).

${HADOOP_HOME}就是安装路径.

测试

1)浏览NameNode和JobTracker的网络接口,它们的地址默认为:

NameNode - http://node1:50070/
JobTracker - http://node2:50030/

3) 使用netstat –nat查看端口49000和49001是否正在使用。

4) 使用jps查看进程

要想检查守护进程是否正在运行,可以使用 jps 命令(这是用于 JVM 进程的ps实用程序)。这个命令列出 5 个守护进程及其进程标识符。

5)将输入文件拷贝到分布式文件系统:
$ bin/hadoop fs -mkdir input
$ bin/hadoop fs -put conf/core-site.xml input

运行发行版提供的示例程序:
$ bin/hadoop jar hadoop-0.20.2-examples.jar grep input output 'dfs[a-z.]+'

补充


Q: bin/hadoop jar hadoop-0.20.2-examples.jar grep input output 'dfs[a-z.]+' 什么意思啊?
A: bin/hadoop jar(使用hadoop运行jar包) hadoop-0.20.2_examples.jar(jar包的名字) grep (要使用的类,后边的是参数)input output'dfs[a-z.]+'
整个就是运行hadoop示例程序中的grep,对应的hdfs上的输入目录为input、输出目录为output。
Q: 什么是grep
A: A map/reduce program that counts the matches of a regex in the input.

查看输出文件:

将输出文件从分布式文件系统拷贝到本地文件系统查看:
$ bin/hadoop fs -get output output
$ cat output/*

或者

在分布式文件系统上查看输出文件:
$ bin/hadoop fs -cat output/*

统计结果:
root@v-jiwan-ubuntu-0:~/hadoop/hadoop-0.20.2-bak/hadoop-0.20.2#bin/hadoop fs-cat output/part-00000
3 dfs.class
2 dfs.period
1 dfs.file
1 dfs.replication
1 dfs.servers
1 dfsadmin

HDFS常用操作

hadoop dfs -ls 列出HDFS下的文件
hadoop dfs -ls in 列出HDFS下某个文档中的文件
hadoop dfs -put test1.txt test 上传文件到指定目录并且重新命名,只有所有的DataNode都接收完数据才算成功
hadoop dfs -get in getin 从HDFS获取文件并且重新命名为getin,同put一样可操作文件也可操作目录
hadoop dfs -rmr out 删除指定文件从HDFS上
hadoop dfs -cat in/* 查看HDFS上in目录的内容
hadoop dfsadmin -report 查看HDFS的基本统计信息,结果如下
hadoop dfsadmin -safemode leave 退出安全模式
hadoop dfsadmin -safemode enter 进入安全模式

8.添加节点

可扩展性是HDFS的一个重要特性,首先在新加的节点上安装hadoop,然后修改$HADOOP_HOME/conf/master文件,加入 NameNode主机名,然后在NameNode节点上修改$HADOOP_HOME/conf/slaves文件,加入新加节点主机名,再建立到新加节点无密码的SSH连接

运行启动命令:

start-all.sh

然后可以通过http://(Masternode的主机名):50070查看新添加的DataNode

9负载均衡

start-balancer.sh,可以使DataNode节点上选择策略重新平衡DataNode上的数据块的分布

结束语:遇到问题时,先查看logs,很有帮助。

10 SHell自动安装脚本

  1. #!/bin/bash
  2. #validate user or group
  3. validate() {
  4. if [ 'id -u' == 0 ];then
  5. echo "must not be root!"
  6. exit 0
  7. else
  8. echo "---------welcome to hadoop---------"
  9. fi
  10. }
  11. #hadoop install
  12. hd-dir() {
  13. if [ ! -d /home/hadoop/ ];then
  14. mkdir /home/hadoop/
  15. else
  16. echo "download hadoop will begin"
  17. fi
  18. }
  19. download-hd() {
  20. wget -c http://archive.apache.org/dist/hadoop/core/stable/hadoop-1.0.4.tar.gz -O /home/hadoop/hadoop-1.0.4.tar.gz
  21. tar -xzvf /home/hadoop/hadoop-1.0.4.tar.gz -C /home/hadoop
  22. rm /home/hadoop/hadoop-1.0.4.tar.gz
  23. Ln -s /home/hadoop/hadoop-1.0.4 /home/hadoop/hadoop1.0.4
  24. }
  25. #hadoop conf
  26. hd-conf() {
  27. echo "export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386" >> /home/hadoop/hadoop1.0.4/conf/hadoop-env.sh
  28. echo "#set path jdk" >> /home/hadoop/.profile
  29. echo "export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386" >> /home/hadoop/.profile
  30. echo "#hadoop path" >> /home/hadoop/.profile
  31. echo "export HADOOP_HOME=/home/hadoop/hadoop1.0.4" >> /home/hadoop/.profile
  32. echo "PATH=$PATH:$HADOOP_HOME/bin:$JAVA_HOME/bin" >> /home/hadoop/.profile
  33. echo "HADOOP_HOME_WARN_SUPPRESS=1" >> /home/hadoop/.profile
  34. #hadoop core-site.xml
  35. echo "<configuration>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  36. echo "<property>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  37. echo "<name>fs.default.name</name>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  38. echo "<value>hdfs://hadoop-master:9000" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  39. echo "</property>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  40. echo "<property>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  41. echo "<name>hadoop.tmp.dir</name>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  42. echo "<value>/home/hadoop/tmp</value>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  43. echo "</property>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  44. echo "</configuration>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  45. #hadoop hdfs-site.xml
  46. echo "<configuration>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  47. echo "<property>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  48. echo "<name>dfs.name.dir</name>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  49. echo "<value>/home/hadoop/name</value>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  50. echo "</property>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  51. echo "<property>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  52. echo "<name>dfs.data.dir</name>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  53. echo "<value>/home/hadoop/data</value>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  54. echo "</property>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  55. echo "<property>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  56. echo "<name>dfs.replication</name>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  57. echo "<value>1</value>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  58. echo "</property>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  59. echo "</configuration>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  60. # hadoop mapred-site.xml
  61. echo "<configuration>" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
  62. echo "<property>" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
  63. echo "<name>mapred.job.tracker</name>" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
  64. echo "<value>hadoop-master:9001</value>" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
  65. echo "</property>" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
  66. echo "</configuration>" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
  67. #hadoop master
  68. echo "hadoop-master" >> /home/hadoop/hadoop1.0.4/conf/masters
  69. #hadoop slaves
  70. echo "hadoop-master" >> /home/hadoop/hadoop1.0.4/conf/slaves
  71. source /home/hadoop/.profile
  72. }
  73. hd-start() {
  74. hadoop namenode -format
  75. }
  76. yes-or-no() {
  77. echo "Is your name $* "
  78. while true
  79. do
  80. echo -n "Enter yes or no: "
  81. read x
  82. case "$x" in
  83. y | yes ) return 0;;
  84. n | no ) return 1;;
  85. * ) echo "Answer yes or no";;
  86. esac
  87. done
  88. }
  89. echo "Original params are $*"
  90. if yes-or-no "$1"
  91. then
  92. echo "HI $1,nice name!"
  93. validate
  94. hd-dir
  95. download-hd
  96. hd-conf
  97. else
  98. echo "Never mind!"
  99. fi

参考:

http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503949.html

http://www.cnblogs.com/alex-blog/articles/3128065.html

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇hadoop下的Pipes(用C++进行hadoop.. 下一篇hadoop 日志存放位置总结

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目