本帖最后由 fc013 于 2016-10-16 18:19 编辑
问题导读:
1.什么是cloudera manager? 2.Hadoop的适用场景与不适用场景? 3.怎样通过cloudera manager安装Hadoop?
cloudera manager是一款hadoop管理软件,通过先安装cloudera manager工具,再通过它安装hadoop,从而简化hadoop的安装和管理。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-
cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了
(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
MapReduce是处理大量半结构化数据集合的编程模型。编程模型是一种处理并结构化特定问题的方式。例如,在一个关系数据库中,使用一种集合语言
执行查询,如SQL。告诉语言想要的结果,并将它提交给系统来计算出如何产生计算。还可以用更传统的语言(C++,Java),一步步地来解决问题。这是两种不同的编程模MapReduce就是另外一种。
Hadoop设计的目的主要包括下面几个方面,也就是适用场景:
1:超大文件
可以是几百M,几百T这个级别的文件。
2:流式数据访问
Hadoop适用于一次写入,多次读取的场景,也就是数据复制进去之后,长时间在这些数据上进行分析。
3:商业硬件
也就是说大街上到处都能买到的那种硬件,这样的硬件故障率较高,所以要有很好的容错机制。
不适用的场景:
1: 低延迟数据访问
Hadoop设计的目的是大吞吐量,所以并没有针对低延迟数据访问做一些优化,如果要求低延迟, 可以看看Hbase。
2: 大量的小文件
由于NameNode把文件的MetaData存储在内存中,所以大量的小文件会产生大量的MetaData。这样的话百万级别的文件数目还是可行的,再多的话就有问题了。
3: 多用户写入,任意修改
Hadoop现在还不支持多人写入,任意修改的功能。也就是说每次写入都会添加在文件末尾。
需要下载的几个重要软件(rpm包放在cdh文件夹):
jdk-6u31-linux-amd64.rpm
cloudera-manager-server-db-2-5.3.2-1.cm532.p0.209.el6.x86_64.rpm
cloudera-manager-daemons-5.3.2-1.cm532.p0.209.el6.x86_64.rpm
cloudera-manager-agent-5.3.2-1.cm532.p0.209.el6.x86_64.rpm
mysqldemysql-connector-java-5.1.39-bin.jar
CDH-5.3.2-1.cdh5.3.2.p0.10-el6.parcel
CDH-5.3.2-1.cdh5.3.2.p0.10-el6.parcel.sha
manifest.json |
1.CDH安装的方法有很多种,今天这里介绍rpm的安装方法
a.环境:四台装有redhat 6.8系统的服务器,ip地址如下且在/etc/hosts中做本地解析
[mw_shl_code=shell,true]vim /etc/hosts
10.33.10.10 master.hadoop.com master
10.33.10.11 slave1.hadoop.com slave1
10.33.10.12 slave2.hadoop.com slave2
10.33.10.13 slave3.hadoop.com slave3[/mw_shl_code]
b.配置本地yum源,前提是本地已经有一个iso镜像
[mw_shl_code=shell,true]#创建挂载点
mkdir /mnt/iso
#挂载镜像
mount -o loop redhat.iso /mnt/iso
#删除yum模板文件
rm -rf /etc/yum.repo.d/*
#创建自己的yum源
vi /etc/yum.repo.d/rhel.repo
[redhat_source]
name=redhat_6.8
baseurl=file:///mnt/iso
enbaled=1
gpgcheck=0
#检查yum源,如果没出现error就说明配置成功
yum repolist[/mw_shl_code]
2.用ssh-keygen做双机互信,一方面是为了远程拷贝的方便另一方面是由于各个节点之间是通过ssh相连接的,如果不做的话会老要输密码
[mw_shl_code=shell,true](1)所有节点(master,slave1,slave2,slave3),生成无密码的密钥对:
ssh-keygen -t rsa一路回车,生成无密码的密钥对。
(2)主节点(master):将公钥添加到认证文件中:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
(3)scp文件到datenode节点(slave1):
scp ~/.ssh/authorized_keys root@slave1:~/.ssh/
(4)将slave1的公钥添加到认证文件中:
cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
(5)复制slave1的认证文件到slave2:
scp ~/.ssh/authorized_keys root@slave2:~/.ssh/
(6)将slave2的公钥添加到认证文件中:
cat~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
(7)复制slave2的认证文件slave3:
scp ~/.ssh/authorized_keys root@slave3:~/.ssh/
(8)将slave3的公钥添加到认证文件中:
cat~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
(9)设置authorized_keys的访问权限:
chmod 600 ~/.ssh/authorized_keys
(10)将最终生成的认证文件复制到所有节点:
scp ~/.ssh/authorized_keys root@master:~/.ssh/
scp ~/.ssh/authorized_keys root@slave1:~/.ssh/
scp ~/.ssh/authorized_keys root@slave2:~/.ssh/[/mw_shl_code]
3.关闭所有节点的防火墙和selinux
[mw_shl_code=shell,true]/etc/init.d/iptables stop
vim /etc/selinux/conf
selinux=disabled[/mw_shl_code]
4.安装ntp,将master作为其它节点的对时中心,保证各个节点的时间一致
[mw_shl_code=shell,true]yum install ntp -y
#更改时区
cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#编辑配置文件
vim /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 10[/mw_shl_code]
配置完成后重启服务并用ntpstat查看状态,若成功则显示
同步时间
[mw_shl_code=shell,true]#每个从节点
ntpdate 10.33.10.10
#做一个计划任务(从节点)
crontab -e
00 */3 * * * /usr/sbin/ntpdate 10.33.10.10 >> /root/ntpdate.log 2>&1
#查看计划任务
crontab -l[/mw_shl_code]
5.安装oracle的java程序和jdbc驱动
首先执行rpm -qa | grep java查看已经安装的原生java,并将其卸载并安装oracle的java
#rpm -ivh jdk-6u31-linux-amd64.rpm
修改文件/etc/profile改变环境变量
[mw_shl_code=shell,true]vim /etc/profile
JAVA_HOME=/usr/java/jdk1.6
JRE_HOME=$JAVA_HOME/jre
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME JRE_HOME PATH
#让变量立即生效
source /etc/profile [/mw_shl_code]
mv mysql-connector-java-5.1.39-bin.jar mysql-connector-java.jar
将mysql-connector-java.jar包移到/usr/share/java下,用于连接java和mysql
6.安装rpm软件包,在安装之前首先安装依赖包(本地yum已经配置好)
[mw_shl_code=shell,true]yum install bind-utils cyrus-sasl-gssapi cyrus-sasl-plain fuse fuse-libs portmap redhat-lsb -y(所有节点)
rpm -ivh cloudera-manager-daemons-5.3.2-1.cm532.p0.209.el6.x86_64.rpm(所有节点)
rpm -ivh cloudera-manager-agent-5.3.2-1.cm532.p0.209.el6.x86_64.rpm(所有节点)
rpm -ivh cloudera-manager-server-5.3.2-1.cm532.p0.209.el6.x86_64.rpm(主节点)[/mw_shl_code]
#vim /etc/cloudera-scm-server/db.properties //指定数据库的类型,总之你擅长什么数据库你就用什么数据库,这里我使用mysql数据库,
数据库的名称是cmf,用户名是root,密码是123
#vim /etc/cloudera-scm-agent/config.ini
server_host=master.hadoop.com //修改此处,将localhost改为主节点的主机名
7.安装mysql数据库
[mw_shl_code=shell,true]#安装数据库并让它开机自启动
yum install mysql-server -y
chkconfig mysqld on
#启动mysql数据库
/etc/init.d/mysqld start
#设置root的初始密码
mysqladmin -uroot p '123'[/mw_shl_code]
进入mysql命令行,创建以下数据库(根据需求,创建的数据库也不一样):
[mw_shl_code=shell,true]mysql -uroot -p123
mysql > create database hive DEFAULT CHARSET utf8;
mysql > create database cmf DEFAULT CHARSET utf8;
mysql > create database reports_manager DEFAULT CHARSET utf8;[/mw_shl_code]
授权root用户在所有节点上拥有所有数据库的访问权限
[mw_shl_code=shell,true]grant all privileges on *.* to 'root'@'%' identified by '123 ' with grant option;
flush privileges; //刷新[/mw_shl_code]
8.将CDH文件拷贝到/opt/cloudera/parcel-repo/下
[mw_shl_code=shell,true]ls /CDH CDH-5.3.2-1.cdh5.3.2.p0.10-el6.parcel
CDH-5.3.2-1.cdh5.3.2.p0.10-el6.parcel.sha
manifest.json
chown cloudera-scm.cloudera-scm /opt -R[/mw_shl_code]
9.创建相应服务的目录
[mw_shl_code=shell,true]#创建namenode数据目录
mkdir -p /data/1/dfs/nd
mkdir -p /data/2/dfs/nd
#创建datanode数据目录
mkdir -p /data/1/dfs/dn
mkdir -p /data/2/dfs/dn
#创建yarn数据目录
mkdir -p /data/1/yarn
mkdir -p /data/2/yarn[/mw_shl_code]
目录创建完后,将数据盘挂载到这些目录下就可以了。
10.正式通过cloudera-manager安装hadoop,登陆http://192.168.1.10/7180,用户名和密码为admin
可以看到,免费版本的CM5已经没有原来50个节点数量的限制了。
各个Agent节点正常启动后,可以在当前管理的主机列表中看到对应的节点,分布式的集群通常包含非常多的机器,由于受到机架槽位和交换机网口的
限制,通常大型的分布式集群都会跨好几个机架,由多个机架上的机器共同组成一个 分布式集群。机架内的机器之间的网络速度通常都会高于跨机架
机器之间的网络速度,并且机架之间机器的网络通信通常受到上层交换机间网络带宽的限制。
具体到Hadoop集群,由于hadoop的HDFS对数据文件的分布式存放是按照分块block存储,每个block会有多个副本(默认为3),并且为了数据的安全和
高效,所以hadoop默认对3个副本的存放策略为:
第一个block副本放在和client所在的node里(如果client不在集群范围内,则这第一个node是随机选取的)。
第二个副本放置在与第一个节点不同的机架中的node中(随机选择)。
第三个副本似乎放置在与第一个副本所在节点同一机架的另一个节点上
如果还有更多的副本就随机放在集群的node里,此处节点数很少,就不需要去配置机架了,采用默认的就可以
接下来,出现以下包名,说明本地Parcel包配置无误,这个parcel包就是我们放到opt下的那三个文件
点击,继续,如果配置本地Parcel包无误,那么下图中的已下载,应该是瞬间就完成了,然后就是耐心等待分配过程就行了,大约10多分钟吧,取决于内网网速。
接下来是服务器检查,可能会遇到以下问题:
1.时钟不同步,这个做个ntp服务器就可以了,其它节点跟它同步一下就可以了
2.Cloudera 建议将 /proc/sys/vm/swappiness 设置为 0。默认值为 60。使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf 以在重启后保存该设置。您可以继续进行安装,但可能会遇到问题,Cloudera Manager 报告您的主机由于交换运行状况不佳。以下主机受到影响: 通过 echo 0 > /proc/sys/vm/swappiness 即可解决。
3.java版本过低,将他换成java7以上的版本就可以了。
选择你想要安装的服务,各个组件的作用
HDFS:分布式文件系统,隐藏集群的信息,我们看到的就是一块儿大硬盘
MapReduce:hadoop的编程框架,用map和reduce实现编程分布式程序设计
Yarn:分布式资源管理系统,用于管理集群系统的资源分配(如内存)
ZooKeeper:分布式协调服务,封装好复杂易出错的关键服务,将简单易用的接口和性能高效,功能稳定的系统提供给用户
Oozie:将多个Map/Reduce作业组合到一个逻辑工作单元中,从而完成更大型的任务
Hive:分布式数据仓库,Hive能将数据映射成数据表,让开发人员可以像使用SQL一样使用MR,它的缺点是速度较慢
Sqoop:提供关系型数据库与HDFS之间的相互转换
Hbase:比Hive快的数据库,为查询而生,查询速度很快
给每一个服务指定主机,这里选择默认
数据库设置,这里选用mysql数据库(如果没有可以先创建再测试连接),填写数据库名称,用户名和密码,先测试一下数据库连接,如果连接失败一般有以下几点原因:
1.数据库驱动安装不到位
2./etc/cloudera-scm-server/db.properties配置文件填写错误
设置各个服务的数据目录,如果条件允许,关键服务挂载多个数据目录,形成多通道,效率更高
集群初始化,创建相关服务的数据目录,并启动服务
安装完成后,就可以进入集群界面看一下集群的当前状况了。
这里可能会出现 无法发出查询:对 Service Monitor 的请求超时的错误提示,如果各个组件安装没有问题,一般是因为服务器比较卡导致的,过一
会刷新一下页面就好了,正常情况都是绿色的,如果出现红色说明出现配置错误,需要查看配置日志文件进行排错
11.最后需要做的是初始化namenode节点
[mw_shl_code=shell,true][hadoop@master ~]$ /tmp/hadoop-0.20.2/bin/hadoop namenode -format
13/10/30 13:48:17 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = master.hadoop.com/10.33.10.10
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 0.20.2
STARTUP_MSG: build = https://svn.apache.org/repos/asf ... ranches/branch-0.20 -r 911707;
compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010
************************************************************/
13/10/30 13:48:17 INFO namenode.FSNamesystem: fsOwner=hadoop,hadoop
13/10/30 13:48:17 INFO namenode.FSNamesystem: supergroup=supergroup
13/10/30 13:48:17 INFO namenode.FSNamesystem: isPermissionEnabled=true
13/10/30 13:48:17 INFO common.Storage: Image file of size 96 saved in 0 seconds.
13/10/30 13:48:17 INFO common.Storage: Storage directory /home/hadoop/name has been successfully formatted.
13/10/30 13:48:17 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master.hadoop.com/10.33.10.10
************************************************************/[/mw_shl_code]
测试
切换用户
#su - hdfs
在集群的一台机器上执行以下模拟Pi的示例程序:
#sudo -u hdfs hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 10 100
执行过程需要花一定的时间,通过YARN的后台也可以看到MapReduce的执行状态:
MapReduce执行过程中终端的输出如下:
[mw_shl_code=shell,true]Number of Maps = 10
Samples per Map = 100
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
Wrote input for Map #3
Wrote input for Map #4
Wrote input for Map #5
Wrote input for Map #6
Wrote input for Map #7
Wrote input for Map #8
Wrote input for Map #9
Starting Job
14/10/13 01:15:34 INFO client.RMProxy: Connecting to ResourceManager at n1/192.168.1.161:8032
14/10/13 01:15:36 INFO input.FileInputFormat: Total input paths to process : 10
14/10/13 01:15:37 INFO mapreduce.JobSubmitter: number of splits:10
14/10/13 01:15:39 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1413132307582_0001
14/10/13 01:15:40 INFO impl.YarnClientImpl: Submitted application application_1413132307582_0001
14/10/13 01:15:40 INFO mapreduce.Job: The url to track the job: http://n1:8088/proxy/application_1413132307582_0001/
14/10/13 01:15:40 INFO mapreduce.Job: Running job: job_1413132307582_0001
14/10/13 01:17:13 INFO mapreduce.Job: Job job_1413132307582_0001 running in uber mode : false
14/10/13 01:17:13 INFO mapreduce.Job: map 0% reduce 0%
14/10/13 01:18:02 INFO mapreduce.Job: map 10% reduce 0%
14/10/13 01:18:25 INFO mapreduce.Job: map 20% reduce 0%
14/10/13 01:18:35 INFO mapreduce.Job: map 30% reduce 0%
14/10/13 01:18:45 INFO mapreduce.Job: map 40% reduce 0%
14/10/13 01:18:53 INFO mapreduce.Job: map 50% reduce 0%
14/10/13 01:19:01 INFO mapreduce.Job: map 60% reduce 0%
14/10/13 01:19:09 INFO mapreduce.Job: map 70% reduce 0%
14/10/13 01:19:17 INFO mapreduce.Job: map 80% reduce 0%
14/10/13 01:19:25 INFO mapreduce.Job: map 90% reduce 0%
14/10/13 01:19:33 INFO mapreduce.Job: map 100% reduce 0%
14/10/13 01:19:51 INFO mapreduce.Job: map 100% reduce 100%
14/10/13 01:19:53 INFO mapreduce.Job: Job job_1413132307582_0001 completed successfully
14/10/13 01:19:56 INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read=91
FILE: Number of bytes written=1027765
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=2560
HDFS: Number of bytes written=215
HDFS: Number of read operations=43
HDFS: Number of large read operations=0
HDFS: Number of write operations=3
Job Counters
Launched map tasks=10
Launched reduce tasks=1
Data-local map tasks=10
Total time spent by all maps in occupied slots (ms)=118215
Total time spent by all reduces in occupied slots (ms)=11894
Total time spent by all map tasks (ms)=118215
Total time spent by all reduce tasks (ms)=11894
Total vcore-seconds taken by all map tasks=118215
Total vcore-seconds taken by all reduce tasks=11894
Total megabyte-seconds taken by all map tasks=121052160
Total megabyte-seconds taken by all reduce tasks=12179456
Map-Reduce Framework
Map input records=10
Map output records=20
Map output bytes=180
Map output materialized bytes=340
Input split bytes=1380
Combine input records=0
Combine output records=0
Reduce input groups=2
Reduce shuffle bytes=340
Reduce input records=20
Reduce output records=0
Spilled Records=40
Shuffled Maps =10
Failed Shuffles=0
Merged Map outputs=10
GC time elapsed (ms)=1269
CPU time spent (ms)=9530
Physical memory (bytes) snapshot=3792773120
Virtual memory (bytes) snapshot=16157274112
Total committed heap usage (bytes)=2856624128
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=1180
File Output Format Counters
Bytes Written=97
Job Finished in 262.659 seconds
Estimated value of Pi is 3.14800000000000000000
[/mw_shl_code]
|