hadoop 集群搭建与注意点
一花一世界 一叶一菩提。
这应该是第二次学习hadoop , 第一次是两年前,刚开始找工作,当时个人眼界 认为ssh 与移动app 开发比较流行,至于hadoop 是一个比较高端的东西,还有一个原因就是当时急需摆脱对父母的依赖,需要一份工作,用活自己;这两年过去了,再次从新审视大数据,感觉一切又回到起点,只不过个人心态,经历,行业环境都发生改变。
我用hadoop 2.7.3 算是比较新版本。 http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz (我用浏览器,百度云下载都失败, 最后用迅雷下载成功);
hadoop 基本知识:
(1)HADOOP是apache旗下的一套开源软件平台
(2)HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理 ;
(3)HADOOP的核心组件有
A.HDFS(分布式文件系统)
B.YARN(运算资源调度系统)
C.MAPREDUCE(分布式运算编程框架)
hadoop 历史:
(1) 当时Nutch 爬虫框架, 面对海量的网页,面临两大瓶颈: 一个海量数据存储索引问题, 另外就是网页价值计算;
(2)2003年、2004年谷歌发表的两篇论文为该问题提供了可行的解决方案: 一个是谷歌分布式存储GFS ,另外一个就是分布式计算框架MapReduce ;
(3) Nutch 作者以及相关开发人员,利用这两种思想,完善Nutch ,并且把hdfs 和mapReduce 独立开始,接着就有了现在hadoop ;
(4) 真正一战成名,是雅虎使用hadoop ,进行运营,并且开源; https://www.infoq.com/news/2010/07/yahoo-hadoop-summit
hadoop 重点:
(1) hadoop 一切重点都是围绕这两个HDFS(分布式存储)和MapReduce 分布计算框架展开;
(2) HDFS 分布文件系统:
(1) namenode :
(2) 它负责管理文件系统名称空间和控制外部客户机的访问 ;
(3) NameNode 决定是否将文件映射到 DataNode 上的复制块上 ;
(2) datanode :
(1) 在 HDFS实例中的单独机器上运行的软件;
(2) 响应来自 HDFS 客户机的读写请求, 比如: 存储,读取,删除等操作;
(3) MapReduce 分布式计算框架:
(1) 该引擎由 JobTrackers 和 TaskTrackers 组成 ;
hadoop 特点:
高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。
高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
高效性。 Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
高容错性。 Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
低成本。 与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。
hadoop 运行在大量廉价的pc机,采用冗余和心跳机制, 最大可能保证数据的完整性,已经系统正常运行。
安装篇:
本人用的是笔记本,8G内存,不过风扇不是很好,用久了,进很多灰尘,导致大型程序运行,cpu 变高,温度也急速提升; 在百度云,购买一组云服务器(3台,每台1G内存,每台20G空间),另绑定一个1M宽带。
两台服务器,就可以组成一个集群。 不过真所谓,一生二,二生三,三生万物。 所以就弄三台服务器。
1. 先做一些预备(时间问题,我就简单点):
(1) 先安装java 环境,同时在 /etc/profile 文件添加:
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.141.x86_64
export HADOOP_HOME=/usr/local/src/hadoop-2.7.3
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
提示: 修改上面文件后,使用命令 source /etc/profile
(2) 安装同步软件: rsync -avz --progress root@172.xx.kk.hh::data /usr/local/data (下载hadoop 等一些配置文件);
(3) 修改 /etc/hosts 文件; 把其他服务器内网地址已经服务器名称添加上去;
(4) 添加一下新系统账户: adduser hadoop , passwd hadoop 输入密码;
(5) ssh 免秘钥登陆:
(1) #进入到我的home目录 ;
(2)
ssh-keygen -t rsa (四个回车)
执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登陆的目标机器上
ssh-copy-id 主机名(你所安装hadoop系统的主机名,要重复多次)
2. 下载hadoop ,修改配置:
(1) 修改这六个文件,然后各个服务器hadoop 配置都相同;
(2) 操作过程中,遇到坑:
(1) hadoop-env.sh 里 export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.141.x86_64 ,java_home 必须填上,不然出现错误: JAVA_HOME is not set and could not be found.
第二个:core-site.xml
<!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://主机名:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-2.4.1/tmp</value>
</property>
第三个:hdfs-site.xml
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>主机名:50090</value> <!--namenode 副本,不要跟namenode 存放在同一个主机里-->
</property>
第四个:mapred-site.xml (mv mapred-site.xml.template mapred-site.xml)
mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
第五个:yarn-site.xml
<!-- 指定YARN的老大(ResourceManager)的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>(存放namenode)主机名</value>
</property>
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
3. 开启软件:
(1) 去主主机(你打算存储namenode 这台),初始化namenode , 执行命令 hadoop namenode -format ;
(2)开启datanode , 执行命令 start-all.sh , 这脚本会自动通过ssh 把其他服务器hadoop datanode 启动;
(1) stop-all.sh 停止所有的datanode 服务;
hadoop 自带web 应用,可以查看到 hadoop 运行状况, http://xxx.ff.xxx.kk:50070/dfshealth.html#tab-overview
时间不早了,就到这里。 你可能还会遇到其他问题。