Hadoop简介
Hadoop是用于存储数据和商用硬件集群运行应用程序的开源软件框架,它提供了海量存储任何类型的数据,极大的处理能力和处理几乎无限的并发任务或作业的能力。
Hadoop的优势
Hadoop博得广大人群眼球的主要原因是它能够存储和处理大两数据的能力,可以支持任何类型的数据,计算快;随着数据量和品种的不断增加,特别是社交媒体和物联网行业,Hadoop是一个重要的考虑因素,其中使用Hadoop的优势如下:
- 计算能力:它的分布式计算模型快速处理大数据,用的越多计算节点,数据的处理能力会更大;
- 灵活性:不同于传统的关系型数据库,你不要存放前必须进行预处理的数据,只要需要使用,可以保存尽可能多的数据,并决定以后怎么使用它,这包括文本、图像和视频的非结构化数据;
- 容错能力:数据和应用程序处理保护,以防止硬件故障,如果一个节点出现故障,作业自动重定向到其他的节点,以确分布式计算不会失败,它会自动存储所有数据的多个副本;
- 低成本:开源框架是免费的,使用商业硬件来存储大量数据;
- 可扩展性:可以轻松简单地通过增加更多的节点增加你的系统。
Hadoop组件
- Hadoop Common -- 其它Hadoop的模块使用的库和工具
- Hadoop Distributed File System (HDFS) -- 存储在多台计算机的数据,恕不另行组织基于Java的可扩展系统。
- MapReduce -- 软件编程模型的并行处理大型数据集
- YARN -- 从分布式应用程序的调度和处理资源请求的资源管理框架。
其他Hadoop相关组件
- Ambari™:配置管理和监控的Apache Hadoop集群基于Web的工具,其中包括Hadoop的HDFS,MapReduce的Hadoop的Hive, HCatalog, HBase, ZooKeeper, Oozie, Pig and Sqoop支持,Ambari还提供查看集群运行状态,如热图,并直观地查看MapReduce的Pig和Hive应用非常久远的功能,诊断一个用户友好的方式表现自己的能力特点的仪表板。
- Avro的™:数据序列化系统
- Chukwa™:用于管理大型分布式系统的数据采集系统。
- HBase的™:支持大表结构化数据存储可扩展的分布式数据库。
- Hive™:数据仓库基础设施,提供数据汇总和及时查询。
- Mahout™:一种可扩展的机器学习和数据挖掘库。
- Pig™:并行计算的高级数据流语言和执行框架。
- Spark™:Hadoop的数据的快速和通用计算引擎。Spark提供了支持广泛的应用,包括ETL,机器学习,流处理和图形计算的简单和表现的编程模型。
- Tez™:广义数据流编程框架,建立在Hadoop的YRAN,它提供了一个强大而灵活的引擎来执行任务的任意DAG来处理批处理和交互式的使用数据情况,TEZ正在通过Hive,pig和Hadoop的生态系统中其他框架,也可以通过其他商业软件(例如:ETL工具)以取代的Hadoop MapReduce的™作为底层执行引擎。
- ZooKeeper的™:分布式应用的高性能协调服务。
Hadoop集群安装
主机规划:
序号 | ip | 主机名 | 角色 |
---|---|---|---|
1 | 110.12.4.92 | LFTd-Hadoop01 | NodeManager/ResourceManager/SecondaryNameNode/DataNode/NameNode |
2 | 110.12.4.93 | LFTd-Hadoop02 | NodeManager/DataNode |
3 | 110.12.4.94 | LFTd-Hadoop03 | NodeManager/DataNode |
Step 1 安装配置Java环境
在所有主机安装配置Java环境,命令如下:
# java -version
java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)
Step 2 创建hadoop用户
在所有主机创建hadoop用户并配置密码,命令如下:
# useradd hadoop
# passwd hadoop
Step 3 配置本地hosts解析
在所有主机配置hosts解析,命令如下:
10.12.4.92 master hadoop-namenode LFTd-Hadoop01
10.12.4.93 slave01 hadoop-datanode-1 LFTd-Hadoop02
10.12.4.94 slave02 hadoop-datanode-2 LFTd-Hadoop03
Step 4 配置ssh免密登陆
在所有主机配置ssh免密登陆,命令如下:
# su - hadoop
$ ssh-keygen -t rsa
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@hadoop-namenode
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@hadoop-datanode-1
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@hadoop-datanode-2
$ chmod 0600 ~/.ssh/authorized_keys
Step 5 安装hadoop源码包
在所有主机下载安装hadoop源码包,命令如下:
# mkdir -p /opt/hadoop
# chown hadoop:hadoop /opt/hadoop
# su - hadoop
$ cd /opt/hadoop
$ wget http://www-us.apache.org/dist/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
$ tar xzf hadoop-2.7.3.tar.gz
$ ln -s /opt/hadoop/hadoop-2.7.3 /opt/hadoop/hadoop
Step 6 配置hadoop用户环境变量
为所有主机配置hadoop用户的环境变量,命令如下:
$ cat .bash_profile
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export HADOOP_PREFIX=/opt/hadoop/hadoop
export HADOOP_HOME=/opt/hadoop/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
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:$JAVA_HOME/jre/bin:$JAVA_HOME/bin
Step 7 修改hadoop配置文件
在master进行修改hadoop配置文件:
cd $HADOOP_HOME/etc/hadoop
core-site.xml:
$ cat core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/hadoop/dfs/name/</value>
</property>
<property>
<name>hadoop.proxyuser.worker.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.worker.groups</name>
<value>*</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop-namenode:9000/</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/hadoop/tmp</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
hdfs-site.xml:
$ cat hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/opt/hadoop/dfs/data</value>
<final>true</final>
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/hadoop/dfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.http.address</name>
<value>hadoop-namenode:50070</value>
</property>
</configuration>
mapred-site.xml:
$ cat mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>hadoop-namenode:9001</value>
</property>
</configuration>
同步配置文件至所有slave:
# su - hadoop
$ rsync -auvx $HADOOP_HOME/ hadoop-datanode-1:$HADOOP_HOME/
$ rsync -auvx $HADOOP_HOME/ hadoop-datanode-2:$HADOOP_HOME/
Step 8 配置master的slave节点
只在master节点配置,命令如下:
# su - hadoop
$ cd $HADOOP_HOME/etc/hadoop
$ vi slaves
hadoop-datanode-1
hadoop-datanode-2
Step 9 启动hadoop集群
在master节点启动:
# su - hadoop
$ start-all.sh
Step 10 检查hadoop集群启动情况
master节点:
$ jps
34720 NodeManager
34609 ResourceManager
34440 SecondaryNameNode
34234 DataNode
43663 Jps
34095 NameNode
slave节点:
# su - hadoop
$ jps
5392 DataNode
5512 NodeManager
13578 Jps