CentOS6.5安装CDH5.12.0和Kudu1.4

1 概述

本文档描述CENTOS6.5操作系统部署CDH企业版的过程。Cloudera企业级数据中心的安装主要分为4个步骤:

1.集群服务器配置,包括安装操作系统、关闭防火墙、同步服务器时钟等;

2.外部数据库安装

3.安装Cloudera管理器;

4.安装CDH集群;

这篇文档将着重介绍Cloudera管理器与CDH的安装,并基于以下假设:

1.操作系统版本:CENTOS6.5

2.MySQL数据库版本为5.1.73

3.CM版本:CM 5.12.0

4.CDH版本:CDH 5.12.0

5.Kudu版本:1.4

6.采用root对集群进行部署

7.您已经下载CDH和CM的安装包

2 前期准备

1.集群中各个节点之间能互相通信使用静态IP地址。IP地址和主机名通过/etc/hosts配置,主机名/etc/HOSTNAME进行配置。

以cm节点为例:

/etc/hosts文件如下:

172.31.8.113 cdh1

172.31.14.96 cdh2

172.31.9.234 cdh3

172.31.2.34 cdh4

2.配置ntp时间同步,将172.31.8.113机器作为本地ntp服务器,其他3台机器与其保持同步,配置片段:

172.31.8.113:

$> sudo vim

/etc/ntp.conf

server  127.127.1.0             # local clock (LCL)

fudge  127.127.1.0 stratum 10 # LCL is  unsynchronized

其他机器:

$> sudo vim

/etc/ntp.conf

# server

127.127.1.0

# local clock (LCL)

# fudge   127.127.1.0 stratum 10 # LCL is unsynchronized

server 172.31.8.113 iburst

重启所有机器的ntp服务:

service ntpd restart

验证始终同步:ntpq -p


3.关闭防火墙:

在每台机器上运行下列命令

service iptables stop

chkconfig iptables off

vim /etc/selinux/config改为SELINUX=disabled

检查所有机器:以cdh1示例

安装httpd服务:

[root@cdh1 ~]# yum -y  install httpd

4.安装mysql。

[root@cdh1

~]# yum -y install mysql

[root@cdh1  ~]# yum -y install mysql-server

启动mysql并配置mysql

[root@cdh1 ~]#  service mysqld start

[root@cdh1 ~]#  /usr/bin/mysql_secure_installation

NOTE: RUNNING ALL  PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL

SERVERS IN PRODUCTION USE!PLEASE READ EACH STEP CAREFULLY!

In order to log into  MySQL to secure it, we'll need the current

password for the root  user.If you've just installed MySQL,  and

you haven't set the  root password yet, the password will be blank,

so you should just  press enter here.

Enter current  password for root (enter for none):

OK, successfully used  password, moving on...

Setting the root  password ensures that nobody can log into the MySQL

root user without the  proper authorisation.

Set root password?  [Y/n] Y

New password:

Re-enter new  password:

Password updated  successfully!

Reloading privilege  tables..

... Success!

By default, a MySQL  installation has an anonymous user, allowing anyone

to log into MySQL  without having to have a user account created for

them.This is intended only for testing, and to  make the installation

go a bit  smoother.You should remove them  before moving into a

production  environment.

Remove anonymous  users? [Y/n] Y

... Success!

Normally, root should  only be allowed to connect from 'localhost'.This

ensures that someone  cannot guess at the root password from the network.

Disallow root login  remotely? [Y/n] n

... skipping.

By default, MySQL  comes with a database named 'test' that anyone can

access.This is also intended only for testing, and  should be removed

before moving into a  production environment.

Remove test database  and access to it? [Y/n] Y

- Dropping test database...

... Success!

- Removing privileges on test database...

... Success!

Reloading the  privilege tables will ensure that all changes made so far

will take effect  immediately.

Reload privilege  tables now? [Y/n] Y

... Success!

Cleaning up...

All done!If you've completed all of the above steps,  your MySQL

installation should  now be secure.

Thanks for using  MySQL!

建立CM和Hive需要的表

[root@cdh1  ~]# mysql -u root -p

Enter  password:

Welcome  to the MySQL monitor.Commands end  with ; or \g.

Your  MySQL connection id is 8

create  database metastore default character set utf8;

CREATE  USER 'hive'@'%' IDENTIFIED BY 'password';

GRANT ALL  PRIVILEGES ON metastore. * TO 'hive'@'%';

FLUSH

PRIVILEGES;

create  database cm default character set utf8;

CREATE  USER 'cm'@'%' IDENTIFIED BY 'password';

GRANT ALL  PRIVILEGES ON cm. * TO 'cm'@'%';

FLUSH  PRIVILEGES;

create  database am default character set utf8;

CREATE  USER 'am'@'%' IDENTIFIED BY 'password';

GRANT ALL  PRIVILEGES ON am. * TO 'am'@'%';

FLUSH  PRIVILEGES;

create  database rm default character set utf8;

CREATE  USER 'rm'@'%' IDENTIFIED BY 'password';

GRANT ALL  PRIVILEGES ON rm. * TO 'rm'@'%';

FLUSH

PRIVILEGES;

安装jdbc驱动:

[root@cdh1 ~]# mv  mysql-connector-java-5.1.34.jar /usr/share/java/

[root@cdh1 ~]# ln -s  mysql-connector-java-5.1.34.jar mysql-connector-java.jar

dctest01:/usr/share/java  # ll

总用量944

-rwxr-xr-x 1 root  root 9603723月16 15:58 mysql-connector-java-5.1.34.jar

lrwxrwxrwx 1 root  root313月16 16:15 mysql-connector-java.jar ->  mysql-connector-java-5.1.34.jar

3 cloudera manager 安装

配置本地repo源,将Cloudera Manager安装需要的7个rpm包下载到本地,放在同一目录,执行createrepo命令生成rpm元数据:

[root@cdh1 cm5.12.0]#  ll

total 958396

-rw-r--r-- 1 root  root9674128 Jul7 04:35  cloudera-manager-agent-5.12.0-1.cm5120.p0.120.el6.x86_64.rpm

-rw-r--r-- 1 root  root 726564488 Jul7 04:35  cloudera-manager-daemons-5.12.0-1.cm5120.p0.120.el6.x86_64.rpm

-rw-r--r-- 1 root  root8704 Jul7 04:35  cloudera-manager-server-5.12.0-1.cm5120.p0.120.el6.x86_64.rpm

-rw-r--r-- 1 root  root10608 Jul7 04:36  cloudera-manager-server-db-2-5.12.0-1.cm5120.p0.120.el6.x86_64.rpm

-rw-r--r-- 1 root  root31880440 Jul7 04:36  enterprise-debuginfo-5.12.0-1.cm5120.p0.120.el6.x86_64.rpm

-rw-r--r-- 1 root  root71204325 Jul7 04:36 jdk-6u31-linux-amd64.rpm

-rw-r--r-- 1 root  root 142039186 Jul7 04:35  oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm

[root@cdh1 cm5.12.0]#  createrepo .

Spawning worker 0  with 7 pkgs

Workers Finished

Gathering worker  results

Saving Primary  metadata

Saving file lists  metadata

Saving other metadata

Generating sqlite DBs

Sqlite DBs complete

配置Web服务器,比如apache2、nginx等,将上述目录移动到Web服务器数据目录,这里为/var/www/html,使得用户可以通过HTTP访问这些rpm包。

验证安装JDK

yum -y install oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm

通过yum安装Cloudera Manager Server

yum -y install  cloudera-manager-server-5.12.0-1.cm5120.p0.120.el6.x86_64.rpm

初始化数据库

sudo /usr/share/cmf/schema/scm_prepare_database.sh  mysql cm cm password

JAVA_HOME=/usr/java/jdk1.7.0_67-cloudera

Verifying that we can  write to /etc/cloudera-scm-server

Creating SCM configuration  file in /etc/cloudera-scm-server

Executing:/usr/java/jdk1.7.0_67-cloudera/bin/java -cp  /usr/share/java/mysql-connector-java.jar:/usr/share/java/oracle-connector-java.jar:/usr/share/cmf/schema/../lib/*  com.cloudera.enterprise.dbutil.DbCommandExecutor  /etc/cloudera-scm-server/db.properties com.cloudera.cmf.db.

[main]  DbCommandExecutorINFOSuccessfully connected to  database.

All done, your SCM  database is configured correctly!

启动Cloudera Manager Server

[root@cdh1 init.d]#  service cloudera-scm-server start

这个服务启动比较慢,稍微等几分钟,等可以看到7180端口,就可以了

[root@cdh1  cm5.12]# netstat -lnpt | grep 7180

tcp00 0.0.0.0:71800.0.0.0:*LISTEN1524/java

通过http://54.169.251.123:7180/cmf/login访问CM

4 CDH安装

1.admin/admin登录到CM。

2.点击继续

3.输入主机ip或者名称,点击搜索找到主机后点击继续

4.点击“更多选项”

5.点击“-”删除其他所有地址,输入http://54.169.251.123/cdh5.12/和http://54.169.251.123/kudu1.4/点击确定

6.输入cm的http地址

7.安装jdk

8.输入root密码

9.开始安装cloudera manager相关到各台节点

10.开始安装cdh和Kudu到各台节点

11.主机检查,点击继续

12.选择需要安装的服务

13.分配角色

14.测试数据库连接,点击继续

15.设置目录

16.等待各个服务启动

17.安装成功

5 Kudu配置

在CM界面添加服务,选择Kudu

分配主机角色

配置相应的目录

点击继续启动Kudu服务

添加Kudu服务成功,安装完毕

6 快速组件服务验证

1.MapReduce验证

#增加用户组

[root]$ groupadd  cloudera-dev

#增加用户

[root]$ useradd  -g cloudera-dev cloudera-dev

#查看用户组cloudera-dev中的所有用户

[root]$ id -g cloudera-dev

#查看用户cloudera-dev所属的所有组

[root]$ id  cloudera-dev

# Hadoop创建相应的用户

[root]$ sudo -u  hdfs hadoop fs -mkdir /user/cloudera-dev

[root]$ sudo -u  hdfs hadoop fs -chown cloudera-dev:cloudera-dev /user/cloudera-dev

#运行Hadoop wordcount示例程序

[root]$ sudo su  cloudera-dev

[cloudera-dev]$ echo  "Hello World Bye World" > file0

[cloudera-dev]$ echo  "Hello Hadoop Goodbye Hadoop" > file1

[cloudera-dev]$  hadoop fs -mkdir -p /user/cloudera-dev/wordcount/input

[cloudera-dev]$ hadoop fs  -put file* /user/cloudera-dev/wordcount/input

[cloudera-dev]$  hadoop jar /opt/cloudera/parcels/CDH/jars/hadoop-examples.jar wordcount  wordcount/input wordcount/output

[cloudera-dev]$  hadoop fs -getmerge wordcount/output output.txt

[cloudera-dev]$ cat  output.txt

2.Hive验证

[root]$ sudo su  cloudera-dev

[cloudera-dev]$ echo  "Alex,Cloudera" > file2

[cloudera-dev]$  hadoop fs -mkdir -p hive/input

[cloudera-dev]$  hadoop fs -put file2 hive/input

[cloudera-dev]$ cat  > test.hql

create external table  test (

name string,

company string

)

row format delimited

fields  terminated by ','

location  '/user/cloudera-dev/hive/input'

[cloudera-dev]$ hive  -f test.hql

[cloudera-dev]$ hive  -e "select * from test" 2> /dev/null

[cloudera-dev]$ hive -e "select  count(*) from test" 2> /dev/null

[cloudera-dev]$ hive -e "drop  table test"

[cloudera-dev]$ exit

3.HBase验证

[cloudera-dev]$   cat > test.hbase

create 'record',  {NAME => 'user'}

put 'record', 'Alex',  'user:company', 'Cloudera'

get 'record', 'Alex'

exit

[cloudera-dev]$   hbase shell test.hbase

[cloudera-dev]$  hbase shell

hbase(main):001:0>  disable 'record'

0 row(s) in 2.6130  seconds

hbase(main):002:0>  drop 'record'

0 row(s) in 1.2880  seconds

#运行Hive Over HBase测试(Read & Write)

[cloudera-dev]$   cat test.hbase

create 'record',  {NAME => 'user'}

put 'record', 'Alex',  'user:company', 'Cloudera'

get 'record', 'Alex'

exit

[cloudera-dev]$   hbase shell test.hbase

[cloudera-dev]$  cat  readHiveOverHbase.hql

create external table  test (name string, company string)

stored by  'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

with serdeproperties  ("hbase.columns.mapping" = ":key,user:company")

tblproperties  ("hbase.table.name" = "record");

[cloudera-dev]$   hive -f readHiveOverHbase.hql

[cloudera-dev]$   hive -e "select * from test" 2> /dev/null

[cloudera-dev]$  hive -e  "select count(*) from test" 2> /dev/null

[cloudera-dev]$  cat  writeHiveOverHbase.hql

create table test1  (name string, firm string)

stored by  'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

with serdeproperties  ("hbase.columns.mapping" = ":key,user:firm")

tblproperties ("hbase.table.name" = "record1");

[cloudera-dev]$   hive -f writeHiveOverHbase.hql

[cloudera-dev]$   hive -e "insert overwrite table test1 select name, company from  test"

[cloudera-dev]$   hbase shell

hbase(main):001:0>  list

TABLE

record

record1

2 row(s) in 0.2400  seconds

=>  ["record", "record1"]

hbase(main):002:0>  scan 'record1'

ROWCOLUMN+CELL

Alexcolumn=user:firm,  timestamp=1500707374796, value=Cloudera

1 row(s) in 0.1360  seconds

4. Kudu验证

先在Impala的高级配置中配置Kudu Master地址:

--kudu_master_hosts=cdh1:7051

[root@cdh1 ~]# impala-shell -i cdh4

[cdh4:21000]  > CREATE TABLE my_first_table

> (

> id BIGINT,

> name STRING,

> PRIMARY KEY(id)

> )

> PARTITION BY HASH PARTITIONS 16

> STORED AS KUDU;

[cdh4:21000]  > INSERT INTO my_first_table VALUES (99,"sarah");

[cdh4:21000]  > INSERT INTO my_first_table VALUES  (1,"john"),(2,"jane"),(3,"jim");

[cdh4:21000]  > select * from my_first_table;

[cdh4:21000]  > delete from my_first_table where id =99;

[cdh4:21000]  > select * from my_first_table;

[cdh4:21000]  > INSERT INTO my_first_table VALUES (99,"sarah");

[cdh4:21000]  > update my_first_table set name='lilei' where id=99;

[cdh4:21000]  > select * from my_first_table;

[cdh4:21000]  > upsertinto my_first_table  values(1, "john"), (4, "tom"), (99, "lilei1");

[cdh4:21000]  > select * from my_first_table;

推荐阅读更多精彩内容