Cloudera Hadoop完全分布式部署

来源:互联网 发布:网络电视4k是什么意思 编辑:程序博客网 时间:2024/06/05 02:35

Hadoop和大数据:

首先,简单概括一下,云计算和大数据之间的关系。在很大程度上它们是相辅相成的,最大的不同在于,云计算是你在做的事儿,而大数据是你所拥有的东西。以云计算为基础的信息存储、分享和挖掘手段为知识生产提供了工具,而通过对大数据分析、预测会使得决策更加精准,两者相得益彰。从另外一个角度去看,云计算是一种IT理念、技术架构和标准,而云计算不可避免会产生大数据。所以,大数据是云计算的延伸。

2003、2004和2006年,谷歌先后发表了GFS、MapReduce和BigTable三篇论文,分别对应了Hadoop中的铁三角三驾马车HDFS、MapReduce和Hbase,以Hadoop代表的开源技术框架迅速成为互联网数据处理的技术生态圈潮流。







Hadoop是什么?

Hadoop是Apache用Java实现的处理大规模数据的分布式计算解决方案平台。其框架最核心的设计就是存储和计算:HDFS和MapRedurce。HDFS为海量的数据提供存储,则Mapdurce为海量的数据提供了计算能力。




我们常常遇到这样的问题,本地硬盘数据读取非常慢,写入更加慢,何况在大数据时代呢。很简单的一个办法就是从多个硬盘读取,假设有100个1T硬盘,每个硬盘存储1%的数据,并行读取,不到两分钟可以读取完。而且每个硬盘的每份数据实行冗余备份。基于100个硬盘的分布式存储,自然而然就可以把一个运算的项目进行100次的分而治之,再把结果整合。这就是Hadoop的核心,存储和计算,分别对应HDFS和MapReduce。




HDFS:Hadoop应用程序中主要的分布式储存系统, HDFS集群包含了一个NameNode(主节点),这个节点负责管理所有文件系统的元数据及存储了真实数据的DataNode(数据节点,可以有很多)。HDFS的特点可以用一句话概括,在廉价机器上以流式访问模式冗余存储大数据文件。

MapReduce(并行计算架构),Map将计算任务拆分成大量独立运行的子任务,接着并行运算,Reduce负责汇总执行结果。

Hive(Hadoop编程)是一个构建在Hadoop基础设施之上的静态数据仓库,通过Hive可以使用类SQL语言查询存放在HDFS上的数据。类SQL语言最终转化成Map/Reduce,虽然Hive提供了SQL查询功能,但是Hive不能进行实时交互增删改查。

HBase(Hadoop数据库)是一种Nosql的Key/Value结构,运行在HFDFS架构上的基于列存储的数据库。它和Hive是基于Hadoop的不同技术实现,和Hive不一样,Hbase能在它的数据库上实时增删改查。Hbase利用Hadoop的基础设施,可以利用通用的设备进行水平的扩展。 而且其不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,所谓非结构化数据存储就是说HBase是基于列的而不是基于行的模式,这样方面读写你的大数据内容。

ZooKeeper(系统管理架构)是Google的开源实现,针对大型分布式系统的可靠协调系统,提供配置维护、名字服务、 分布式同步、组服务等,目标是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。


CDH:Hadoop发行版:



CDH (Cloudera's Distribution Hadoop),是Hadoop众多分支的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建,并集成了很多补丁,可直接用于生产环境。Cloudera Manager则是为了便于在集群中进行Hadoop等大数据处理相关的服务安装和监控管理的组件,对集群中主机、Hadoop、Hive、Spark等服务的安装配置管理做了极大简化。


官方文档地址:https://www.cloudera.com/documentation.html
Cloudera-Manager下载地址:http://archive.cloudera.com/cm5
Cloudera Parcel 下载地址:http:archive.cloudera.com/cdh5

官方共给出了多种安装方式:第一种方法必须要求所有机器都能连网,由于最近各种国外的网站被墙的厉害,我尝试了几次各种超时错误,巨耽误时间不说,一旦失败,重装非常痛苦。另一种离线安装,对系统侵入性最小,而且重装什么的都非常方便。后期的集群统一包升级也非常好。这也是我之所以选择离线安装的原因。


Hadoop启动模式有三种:
(1)、单机模式:默认情况下,运行为一个单独机器上的独立Java进程,主要用于调试环境;
(2)、伪分布式:单个机器上的模拟分布式多节点环境,每一个Hadoop守护进程作为一个独立的Java进程去运行;
(3)、完全分布式模式:真实的生产环境,搭建在完全分布式的集群环境中;


在生产环境中,PC Server第一选择,云主机第二选择,这里选择云主机。百万级别的小型机不选择,违背了Hadoop的初衷,低廉分布式。

我这里使用阿里云的三台主机来实例搭建CDH完全分布式集群:

178.18.27.22   NameNode   1核4GB   Centos6.8   管理节点
178.18.27.18   DataNode1   1核1GB   Centos6.8   计算节点
178.18.27.23   DataNode2   1核1GB   Centos6.8   计算节点

1、在NameNode、DataNode1、DataNode2上的hosts文件上添加:

178.18.27.22   NameNode
178.18.27.18   DataNode1
178.18.27.23   DataNode2

2、关闭防火墙以及SElinux,hadoop用户无密码登陆,进并且行NTP同步:

对NameNode设置:

[root@NameNode ~]# chkconfig --list|grep iptables
iptables 0:off1:off2:on3:on4:on5:on6:off

[root@NameNode ~]# chkconfig iptables off
[root@NameNode ~]# chkconfig --list|grep iptables
iptables 0:off1:off2:off3:off4:off5:off6:off

[root@NameNode ~]# service iptables status
iptables: Firewall is not running.

同样,对DataNode1和DataNode2也是相同设置:

[root@DataNode1 ~]# service iptables status
iptables: Firewall is not running.

[root@DataNode2 ~]# service iptables status
iptables: Firewall is not running.

创建Hadoop用户,并且赋予Hadoop用户sudo权限:
[root@NameNode ~]# vim /etc/sudoers
root ALL=(ALL) ALL
hadoop ALL=(root)NOPASSRD:ALL

配置Hadoop用户无密码登陆。


3、下载安装前所需要的组件:

首先,下载cloudera-manager.repo

[root@NameNode ~]# vim /etc/yum.repos.d/cloudera-manager.repo 

[cloudera-manager]
name = Cloudera Manager, Version 5.7.6
baseurl = https://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.7.6/
gpgkey = https://archive.cloudera.com/redhat/cdh/RPM-GPG-KEY-cloudera
gpgcheck = 1

其次,http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.7.6/RPMS/x86_64/下载所有的RPM包。


接着,下载cloudera-manager-installer.bin。http://archive.cloudera.com/cm5/installer/5.7.6/

再接着下载Parcel包(CDH的Hadoop集群),一共三个文件,然后把41K大小的CDH-5.7.6-1.cdh5.7.6.p0.6-el6.sha1文件改成sha即可。http://archive.cloudera.com/cdh5/parcels/5.7.6/



[root@NameNode ~]# yum install mysql mysql-server mysql-devel
[root@NameNode ~]# chkconfig mysqld on
[root@NameNode ~]# service mysqld restart

#创建Hive数据库
mysql> create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

# 安装oozie
mysql> create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
mysql> create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

#授权root用户在主节点拥有访问所有数据库的权限
mysql> grant all privileges on *.* to 'root'@'NameNode' identified by 'xxxx' with grant option; 

# 刷新:
mysql> flush privileges;


4、安装Cloudera-Manager管理器:

首先,在NameNode节点上,启动安装命令:
[root@NameNode ~]# chmod +x cloudera-manager-installer.bin

[root@NameNode ~]# ./cloudera-manager-installer.bin

接着是不断Next和Yes即可,如无报错,安装成功。




5、安装Cloudera Hadoop集群:

在浏览器输入:NameNode的IP地址+7180即可访问Web安装页面。登陆的用户名和密码都是:admin。


当看到是否需要安装JDK的时候,选择跳过,因为已经安装了Oracel JDK了。


选择SSH登陆凭据:




这是系统自动寻找的parcel-repo的位置,所以前面要做好准备,就是把parcel包放到/opt/cloudera/parcel-repo中。




安装Parcel包完成:




集群安装前的状态:

[root@NameNode ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag 
然后把条命令加进去/etc/rc.local。




下面是集群安装选项,选择自定义,一开始可以先安装HDFS和YARM。



集群自定义角色分配:
NameNode:安装HDFS NameNode、HDFS Secondary NameNode、HDFS Blancer、Cloudera Manager Service Host Monitor、
Yarm Resourcemanager、YARM Job History Server。
DataNode【1-2】:安装HDFS DataNode、YARM NodeManager。





集群数据库的设置,点击“测试连接”,测试完成后“继续”:






6、成功安装CDH:

重新启动cloudera-scm-server:
[root@NameNode ~]# service cloudera-scm-server restart
Stopping cloudera-scm-server: [ OK ]
Starting cloudera-scm-server: [ OK ]

重新启动cloudera-scm-server:
[root@NameNode ~]# service cloudera-scm-agent restart
Stopping cloudera-scm-agent: [ OK ]
Starting cloudera-scm-agent: [ OK ]

初始化以后,进入CDH的主界面,重启集群Cluser1:

这里可能会出现无法发出查询:对 Service Monitor 的请求超时的错误提示,如果各个组件安装没有问题,一般是因为服务器比较卡导致的,过一会刷新一下页面就好了:





如果在CDH运行中出现某些难以判断的问题,记得看/var/下的日志,看日志,看日志。

如果要为集群添加服务,点击添加,然后选择,例如,安装oozie。





7、Hadoop简单命令:

Hadoop相关服务安装目录:/opt/cloudera/parcels/CDH/

所有jar包所在目录:/opt/cloudera/parcels/CDH/jars

CM agent的配置目录:/etc/cloudera-scm-agent/

CM server的配置目录:/etc/cloudera-scm-server/

CM日志目录:/var/log/cloudera-scm-*

Hadoop客户端配置目录:/etc/hadoop/*

查看Cloudera Hadoop版本:
[root@NameNode ~]# hadoop version



查看Cloudera Hadoop的根目录:
[root@NameNode ~]# hadoop fs -ls / 



查看HDFS的大小:



进入Hive界面:
[root@NameNode ~]# hive shell

进入Hbase界面:
[root@NameNode ~]# hbase shell

配置Java目录并且jps查看进程:
[root@NameNode ~]# vim /etc/profile

export JAVA_HOME=/usr/java/jdk1.7.0_67-cloudera
export PATH=$PATH:$JAVA_HOME/bin





8、WordCount测试:

[root@NameNode ~]# sudo -u hdfs hadoop fs -put /etc/hadoop/conf/*.xml /wenzhiyi/input
[root@NameNode ~]# sudo -u hdfs hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar wordcount /wenzhiyi/input /wenzhiyi/output/

17/07/31 17:49:28 INFO client.RMProxy: Connecting to ResourceManager at NameNode/172.18.27.22:8032    17/07/31 17:49:29 INFO input.FileInputFormat: Total input paths to process : 5    17/07/31 17:49:29 INFO mapreduce.JobSubmitter: number of splits:5    17/07/31 17:49:29 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1501486141748_0003    17/07/31 17:49:29 INFO impl.YarnClientImpl: Submitted application application_1501486141748_0003    17/07/31 17:49:29 INFO mapreduce.Job: The url to track the job: http://NameNode:8088/proxy/application_1501486141748_0003/    17/07/31 17:49:29 INFO mapreduce.Job: Running job: job_1501486141748_0003    17/07/31 17:49:39 INFO mapreduce.Job: Job job_1501486141748_0003 running in uber mode : false    17/07/31 17:49:39 INFO mapreduce.Job:  map 0% reduce 0%    17/07/31 17:49:45 INFO mapreduce.Job:  map 20% reduce 0%    17/07/31 17:49:51 INFO mapreduce.Job:  map 40% reduce 0%    17/07/31 17:49:57 INFO mapreduce.Job:  map 60% reduce 0%    17/07/31 17:50:03 INFO mapreduce.Job:  map 80% reduce 0%    17/07/31 17:50:09 INFO mapreduce.Job:  map 100% reduce 0%    17/07/31 17:50:15 INFO mapreduce.Job:  map 100% reduce 100%    17/07/31 17:50:15 INFO mapreduce.Job: Job job_1501486141748_0003 completed successfully    17/07/31 17:50:15 INFO mapreduce.Job: Counters: 49        File System Counters            FILE: Number of bytes read=3502            FILE: Number of bytes written=729548            FILE: Number of read operations=0            FILE: Number of large read operations=0            FILE: Number of write operations=0            HDFS: Number of bytes read=14696            HDFS: Number of bytes written=8473            HDFS: Number of read operations=18            HDFS: Number of large read operations=0            HDFS: Number of write operations=2        Job Counters             Launched map tasks=5            Launched reduce tasks=1            Data-local map tasks=5            Total time spent by all maps in occupied slots (ms)=23706            Total time spent by all reduces in occupied slots (ms)=4860            Total time spent by all map tasks (ms)=23706            Total time spent by all reduce tasks (ms)=4860            Total vcore-seconds taken by all map tasks=23706            Total vcore-seconds taken by all reduce tasks=4860            Total megabyte-seconds taken by all map tasks=24274944            Total megabyte-seconds taken by all reduce tasks=4976640        Map-Reduce Framework            Map input records=521            Map output records=542            Map output bytes=14797            Map output materialized bytes=4721            Input split bytes=573            Combine input records=542            Combine output records=254            Reduce input groups=198            Reduce shuffle bytes=4721            Reduce input records=254            Reduce output records=198            Spilled Records=508            Shuffled Maps =5            Failed Shuffles=0            Merged Map outputs=5            GC time elapsed (ms)=489            CPU time spent (ms)=2870            Physical memory (bytes) snapshot=1984499712            Virtual memory (bytes) snapshot=9045495808            Total committed heap usage (bytes)=1437683712        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=14123        File Output Format Counters             Bytes Written=8473    


原创粉丝点击