一、组件简介
Hadoop的核心为HDFS(分布式文件系统)和MapReduce(离线计算框架)。HDFS就是将要储存的文件分散在不同的硬盘上,并记录他们的位置,而MapReduce就是将计算任务分配给多个计算单元。
Hadoop=HDFS+Yarn+MapReduce+Hbase+Hive+Pig+…
1、HDFS:分布式文件系统,隐藏集群细节,可以看做一块儿超大硬盘
HDFS已经成为现在大数据的储存标准,他适合储存一次写入,多次读取的数据,并且他有自动检错、快速回复数据的功能,能够避免数据因为硬盘损坏而丢失的危险。
HDFS是由DataNode和NameNode组成的,DataNode负责储存数据,而NameNode负责管理数据,一个NameNode对应多个DataNode,NameNode记录着每个DataNode储存的数据内容,并曝露给上层系统调用,也会根据上层的指令对DataNode进行增、删、复制。
主:namenode,secondarynamenode
从:datanode
2、YARN和Zookeepr都是用来管理的,YARN是面对计算资源的管理,而Zookeeper是面对服务器集群的管理
YARN:资源管理框架,用来管理和调度CPU、内存的资源,避免所有的计算资源被某些任务大量占用,有点像是云管理平台可以创造不同的容器和虚拟机,并将这些硬件资源按用户的意愿分配给计算任务。
主:ResourceManager
从:NodeManager
Zookeeper:集用来做群管理,跟微服务里的功能相似,可以在集群里面选出一个leader,并保证集群里面服务器的一致性、可靠性和实时性。
主:QuorumPeerMain
从:QuorumPeerMain
3、MapReduce:是将计算任务分配给数据就近的处理节点,进行完运算后再合并导入结果,能很好的去进行大量数据的调取,但是延时较高,不适合处理实时流数据。MapReduce可以分为Map和Reduce两个处理步骤。首先Map将用户输入的指令解析出一个个的Key/Value,然后再将转化成一组新的KV值,将原本的任务拆解成小的而且是临近数据的,并且确保这些运算任务彼此不会影响。而Reduce则是将这些运算的结果汇总起来,将结果写入。
4、Pig:基于hadoop的一门数据处理语言,类似于python等编程语言
5、Hbase:Hadoop下的分布式数据库,类似于NoSQL,用来储存和查询非结构化和半结构化数据的工具,利用row key的方式来访问数据
主:HRegionserver,HMaster,HPeerMain(在使用zookeeper作为协调时没有此进程)
6、Hive:分布式数据仓库,让开发人员可以像使用SQL一样使用MR。将Hadoop包装成使用简单的软件,用户可以用比较熟悉的SQL语言来调取数据,也就是说,Hive其实就是将Hadoop包装成MySQL。Hive适合使用在对实时性要求不高的结构化数据处理。
7、Storm:前面两个都是用来处理非实时的数据,对于某些讲求高实时性(毫秒级)的应用,就需要使用Storm。Storm也是具有容错和分布式计算的特性,架构为master-slave,可横向扩充多节点进行处理,每个节点每秒可以处理上百万条记录。可用在金融领域的风控上。
8、Impala:Impala和Hive的相似度很高,最大的不同是Impala使用了基于MPP的SQL查询,实时性比MapReduce好很多,但是无法像Hive一样可以处理大量的数据。Impala提供了快速轻量查询的功能,方便开发人员快速的查询新产生的数据。
9、Scoop:用于将传统数据库中数据导入到hbase中一个导入工具。
10、Spark:基于内存的分布式处理框架
主:Mater
从:worker
二、搭建步骤
安装包链接:
链接:https://pan.baidu.com/s/1dWS3xAHuicEl3YnzVlpMrQ
提取码:04fb
hadoop-2.8.3.tar.gz
jdk-8u202-linux-x64.tar.gz
master:192.168.120.133
node1:192.168.120.156
node2:192.168.120.157
步骤一、配置下每台主机的/etc/hosts文件(所有机器)
# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.120.133 master
192.168.120.156 node1
192.168.120.157 node2
步骤二、关闭防火墙(所有机器)
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# vim /etc/selinux/config
SELINUX=disabled
步骤三、安装java(所有机器)
# tar -zxvf jdk-8u202-linux-x64.tar.gz -C /opt
# vi ~/.bashrc
export JAVA_HOME=/opt/jdk1.8.0_202
export PATH=$PATH:$JAVA_HOME/bin
# source ~/.bashrc
# java -version
步骤四、免秘钥ssh登录(所有机器)
# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# chmod 0600 ~/.ssh/authorized_keys
然后尝试下能不能免秘钥 ssh localhost ,如果可以,再将自己的公钥给两个node
# ssh-copy-id root@node1
# ssh-copy-id root@ndoe2
对于其它两个node,也执行同样的命令,然后将公钥分别交给另外两台机器,至此三台虚拟机间就可以相互无秘钥切换了。
步骤五、安装hadoop修改配置(master主机)
# tar -zxvf hadoop-2.8.3.tar.gz -C /opt
# cd /opt/hadoop-2.8.3/etc/hadoop/
# vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
</configuration>
# vim hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
<dedication>Datanode</dedication>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
# vim 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>
</configuration>
# vim yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--日志保存时间 默认保存3-7-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<property> <!--ResourceManager 对客户端暴露的地址-->
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property> <!--ResourceManager 对ApplicationMaster暴露的地址-->
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property> <!--ResourceManager 对NodeManager暴露的地址-->
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property> <!--ResourceManager 对管理员暴露的地址-->
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property> <!--ResourceManager 对外web暴露的地址,可在浏览器查看-->
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
步骤六、修改环境变量(master主机)
修改yarn-env.sh和hadoop-env.sh
#将这句话放到带有java_home的位置,主要是有时候它就是不认你配置的java_home环境变量
export JAVA_HOME=/opt/jdk1.8.0_202
# vim yarn-env.sh
export JAVA_HOME=/opt/jdk1.8.0_202
# vim hadoop-env.sh
export JAVA_HOME=/opt/jdk1.8.0_202
# vim slaves
node1
node2
将hadoop添加到环境变量,修改~/.bashrc
# vim ~/.bashrc
export JAVA_HOME=/opt/jdk1.8.0_202
export HADOOP_HOME=/opt/hadoop-2.8.3
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# source ~/.bashrc
步骤七、同步文件到node1、node2(master主机)
# scp -r /opt/ root@node1:/
# scp -r /opt/ root@node2:/
# scp ~/.bashrc root@node1:/root/.bashrc
# scp ~/.bashrc root@node2:/root/.bashrc
两台机器上分别 source ~/.bashrc
步骤八、初始化namenode、启动hadoop(master主机)
# hdfs namenode -format
# start-dfs.sh
# start-yarn.sh
master节点上输入jps:
# jps
64244 ResourceManager
64089 SecondaryNameNode
63899 NameNode
74812 Jps
两个node节点:
# jps
1568 DataNode
4899 Jps
1678 NodeManager
步骤九、测试hadoop
浏览器访问192.168.120.133:8088
节点状态running
步骤十、hadoop 自带的mapreduce 用例
# cd /opt/hadoop-2.8.3
# hdfs dfs -mkdir /user
# hdfs dfs -mkdir /user/fay
# hdfs dfs -put etc/hadoop input
# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar grep input output 'dfs[a-z.]+'
# 没有报java错误,那就ok,在output目录查看下输出结果:
# hdfs dfs -cat output/*
6 dfs.audit.logger
4 dfs.class
3 dfs.logger
3 dfs.server.namenode.
2 dfs.audit.log.maxfilesize
2 dfs.period
2 dfs.audit.log.maxbackupindex
1 dfsmetrics.log
1 dfsadmin
1 dfs.webhdfs.enabled
1 dfs.servers
1 dfs.replication
1 dfs.permissions.enabled
1 dfs.log
1 dfs.file
1 dfs.datanode.max.xcievers
1 dfs.namenode.secondary.http