目录
文章目录
一 环境准备
组件 | 配置 |
---|---|
虚拟机 | 至少分配6G的内存,4个核心,40G的硬盘空间,否则可能运行不起来 |
JDK | 1.8 |
Mysql | 5.7 |
二 下载相关组件
组件我也会准备好一份
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s07z6PwD-1603437355812)(https://img2020.cnblogs.com/blog/1235870/202006/1235870-20200604174816834-1683267786.png)]
红框中都需要下载
下载地址:https://archive.cloudera.com/cdh6/6.3.2/parcels/
红框中都需要下载
MySQL JDBC jar
http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.46/mysql-connector-java-5.1.46.jar
1
ext-2.2.zip解决oozie web UI报错问题
http://archive.cloudera.com/gplextras/misc/ext-2.2.zip
三 安装
1.常用yum源更新,gcc,G++,C++等环境并关闭防火墙等
yum -y install chkconfig python bind-utils psmisc libxslt zlib sqlite cyrus-sasl-plain cyrus-sasl-gssapi fuse fuse-libs redhat-lsb postgresql* portmap mod_ssl openssl openssl-devel python-psycopg2 MySQL-python python-devel telnet pcre-devel gcc gcc-c++
所有节点先安装一些实用的小工具
#1.安装vim编辑器
yum install -y vim
#2.安装lrzsz文件传输工具
yum -y install lrzsz
#3.安装wget文件下载工具
yum -y install wget
#4.安装netstat,查看端口监听状况: netstat -ntlp | grep 端口号
yum -y install net-tools
#5.下载unzip解压工具,解压命令: uzip 压缩包.zip -d 解压目录
yum install -y unzip zip
关闭防火墙所有节点都要执行
#1.查看防火墙状态
firewall-cmd --state
#2.临时关闭防火墙
systemctl stop firewalld
#3.永久关闭防火墙
systemctl disable firewalld
#4.临时开启防火墙
#systemctl start firewalld
#临时关闭selinux
setenforce 0
#永久关闭selinux
vim /etc/selinux/config
#将SELINUX=enforcing改为
SELINUX=disabled
#查看selinux状态
getenforce 0
配置网卡
一、网络配置
1、静态网卡配置
先查看原本的配置信息
cat /etc/sysconfig/network-scripts/ifcfg-ens33
防止配置失败,先备份一份
cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33.tempalte
cat /etc/sysconfig/network-scripts/ifcfg-ens33.tempalte
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改BOOTPROTO选项为static,在文件末尾追加
IPADDR="192.168.232.131"
NETMASK="255.255.255.0"
GATEWAY="192.168.232.2"
DNS="192.168.232.2"
NM_CONTROLLED="no"
source /etc/sysconfig/network-scripts/ifcfg-ens33
2、网关配置
cat /etc/resolv.conf
vim /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.232.2
nameserver 8.8.8.8
网关IP和DNS地址一样
8.8.8.8 是Google提供的免费DNS服务器的IP地址
注意,配置是根据之前安装Linux时生成的以太网配置修改的,这里将IP地址改成了 192.168.232.129
3、停止networkManager服务
systemctl stop NetworkManager.service
systemctl disable NetworkManager.service
4、重启网卡服务
systemctl restart network
ifconfig
ping hao123.com
修改主机名所有节点都要执行,修改后需重启节点
vim /etc/hostname
#分别改名为
hadoop01
hadoop02
hadoop03
配置hosts文件
vim /etc/hosts
所有节点都要配置
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.213.11 hadoop01
192.168.213.12 hadoop02
192.168.213.13 hadoop03
2.配置免密登录
第一步:三台节点生成公钥与私钥
在三台机器执行以下命令,生成公钥与私钥
#执行下面的命令之后,要连续按三个回车
cd ~
ssh-keygen -t rsa
第二步:拷贝公钥到同一台节点
三台机器将拷贝公钥到第一台服务器,三台服务器执行命令:
ssh-copy-id hadoop01
第三步:复制第一台服务器的认证到其他服务器
将第一台机器的公钥拷贝到其他机器上,在第一台机器上面执行以下命令
scp /root/.ssh/authorized_keys hadoop02:/root/.ssh
scp /root/.ssh/authorized_keys hadoop03:/root/.ssh
3.设置时间同步
#设置时区为Asia/Shanghai
timedatectl set-timezone Asia/Shanghai
#查看是否安装了ntpd的服务
rpm -qa | grep ntpd
#如果没有安装,可以进行在线安装
yum -y install ntp
#启动ntpd的服务
service ntpd start
#设置ntpd的服务开机启动
systemctl enable ntpd.service
#查看ntpd的服务是否启动
service ntpd status
#设置定时任务
#与阿里云服务器进行时钟同步
crontab -e
#设置的内容如下
*/1 * * * * /usr/sbin/ntpdate -u ntp4.aliyun.com;
设置成功后会一直出现You have new mail in /var/spool/mail/root
的邮件提示,可使用下面命令关闭邮件提示
echo "unset MAILCHECK" >> /etc/profile
source /etc/profile
4.主节点hadoop01部署MySQL5.7
第一步:彻底卸载系统原装的MySQL
1.使用以下命令查看当前安装mysql情况,查找以前是否装有mysql
rpm -qa|grep -i mysql
2.如果查询到已安装mysql需停止mysql服务并删除之前安装的mysql
#停止mysql服务
systemctl stop mysqld
#删除软件命令
rpm -e –nodeps 包名
#如果上面命令提示依赖包错误,则使用以下命令尝试:
rpm -ev 包名 --nodeps
#如果还报错:error: %preun(xxxxxx) scriptlet failed, exit status 1,则用以下命令尝试:
rpm -e --noscripts 包名
#最终再使用rpm -qa|grep -i mysql命令,查询不到结果则证明mysql已卸载
3.查找之前老版本mysql的目录、并且删除老版本mysql的文件和库
#查找卸载残留的mysql的目录
find / -name mysql #然后使用 rm -rf 将查询到的目录全部删除
#删除老版本mysql的配置文件
rm -rf /etc/my.cnf
rm -rf /etc/my.cnf.d
第二步:yum源设置为阿里源
使用阿里的镜像源安装MySQL时下载速度比较快
#1.备份原镜像文件,便于后期恢复
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.backup
#2.下载阿里云的CentOS-Base.repo 到/etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#3. 清除缓存
yum clean all
#4. 生成缓存
yum makecache
第二步:下载配置MySQL的rpm安装包
mkdir -p /baicdt/softwares/mysql_rpm
cd /baicdt/softwares/mysql_rpm
#1.下载rpm包
wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
#2.安装myaql源
yum localinstall -y mysql80-community-release-el7-3.noarch.rpm
#3.检查MySQL源是否安装成功,此时查到的安装包的版本都是mysql5.8版本的
yum repolist enabled | grep "mysql.*-community.*"
#4.修改yum源配置文件,获取自己想要安装的mysql5.7版本
vim /etc/yum.repos.d/mysql-community.repo
#需要编辑的内容参考下图
#5.检查MySQL源是否选择的是5.7版本,此时查到的安装包的版本都是mysql5.7版本的
yum repolist enabled | grep "mysql.*-community.*"
第三步:安装mysql
#下载速度较慢,需等待一段时间
yum -y install mysql-community-server
第四步:启动mysql服务
#1.临时启动mysql服务
systemctl start mysqld
#2.开机启动mysql服务
systemctl enable mysqld
#3.查看MySQL的启动状态
systemctl status mysqld
#4.查看mysql进程是否正常开启
ps -le | grep mysqld
第五步:修改mysql中root用户本地登录密码
mysql安装完成之后,在/var/log/mysqld.log
文件中给root用户生成了一个默认密码。通过以下命令找到密码:
grep 'temporary password' /var/log/mysqld.log
-- 登录MySQL,使用刚才找到的密码
mysql -u root -p
-- 修改root用户密码(二选一)
#输入初始密码,此时不能做任何事情,因为MySQL默认必须修改密码之后才能操作数据库:
#这里有个问题,新密码设置的时候如果设置的过于简单会报错:
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
#设置之后就是我上面查出来的那几个值了,此时密码就可以设置的很简单,例如1234之类的。到此数据库的密码设置就完成了。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
第六步:修改mysql配置文件
vim /etc/my.cnf
在配置文件中添加下面的内容:
#因为服务器是测试环境,为了方便记mysql密码,关闭了密码策略。如果是生产环境,则不建议修改密码策略
validate_password=off
character_set_server=utf8
init_connect='SET NAMES utf8'
重新启动mysql服务使配置生效:
systemctl restart mysqld
MySQL默认配置文件路径:
- 配置文件: /etc/my.cnf
- 日志文件: /var/log//var/log/mysqld.log
- 服务启动脚本: /usr/lib/systemd/system/mysqld.service
- socket文件: /var/run/mysqld/mysqld.pid
第七步:允许root用户远程登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
以下内容了解
-- 指定特定的IP,开启root用户远程连接
GRANT ALL PRIVILEGES ON *.* TO 'root'@'指定的IP' IDENTIFIED BY 'root用户的密码' WITH GRANT OPTION;
-- 一般为了安全起见,会创建专用的远程访问用户
GRANT ALL PRIVILEGES ON *.* TO 'dadeity'@'%' IDENTIFIED BY 'daDeity@163.com' WITH GRANT OPTION;
第八步:创建CDH源数据库、用户、服务的数据库
CREATE DATABASE scm DEFAULT CHARACTER SET utf8;
CREATE USER 'scm'@'%'IDENTIFIED BY 'scm';
GRANT ALL PRIVILEGES ON scm.* TO 'scm'@'%' IDENTIFIED BY 'scm';
GRANT ALL PRIVILEGES ON *.* TO 'scm'@'%' IDENTIFIED BY 'scm' WITH GRANT OPTION;
CREATE DATABASE amon DEFAULT CHARACTER SET utf8;
CREATE USER 'amon'@'%'IDENTIFIED BY 'amon';
GRANT ALL PRIVILEGES ON amon.* TO 'amon'@'%' IDENTIFIED BY 'amon';
GRANT ALL PRIVILEGES ON *.* TO 'amon'@'%' IDENTIFIED BY 'amon' WITH GRANT OPTION;
CREATE DATABASE hive DEFAULT CHARACTER SET utf8;
CREATE USER 'hive'@'%'IDENTIFIED BY 'hive';
GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'%' IDENTIFIED BY 'hive';
GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' IDENTIFIED BY 'hive' WITH GRANT OPTION;
CREATE DATABASE hue DEFAULT CHARACTER SET utf8;
CREATE USER 'hue'@'%'IDENTIFIED BY 'hue';
GRANT ALL PRIVILEGES ON hue.* TO 'hue'@'%' IDENTIFIED BY 'hue';
GRANT ALL PRIVILEGES ON *.* TO 'hue'@'%' IDENTIFIED BY 'hue' WITH GRANT OPTION;
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8;
CREATE USER 'oozie'@'%'IDENTIFIED BY 'oozie';
GRANT ALL PRIVILEGES ON oozie.* TO 'oozie'@'%' IDENTIFIED BY 'oozie';
GRANT ALL PRIVILEGES ON *.* TO 'oozie'@'%' IDENTIFIED BY 'oozie' WITH GRANT OPTION;
-- 刷新mysql的权限列表
FLUSH PRIVILEGES;
5、创建本地YUM仓库
确保已经把cm6.3.1、cdh6.3.2、mysql-connector-java-5.1.46.jar和ext-2.2.zip已经上传到了hadoop01服务器的/root目录下
yum install -y createrepo
cd /root/cm6.3.1/
#注意:下面的命令最后带一个点,最后会生成一个repodata目录
createrepo .
配置Web服务器
将cdh6.3.2目录和cm6.3.1目录 移动到/var/www/html目录下, 使得用户可以通过HTTP访问这些rpm包。
#在hadoop01服务器下操作
cd /root/cdh6.3.2
mkdir -p /opt/cloudera/parcel-repo/
cp CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel /opt/cloudera/parcel-repo/
cp CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha1 /opt/cloudera/parcel-repo/
cp CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha256 /opt/cloudera/parcel-repo/
cp manifest.json /opt/cloudera/parcel-repo/
cd /opt/cloudera/parcel-repo/
#校验文件是否下载完全
sha1sum CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel | awk '{ print $1 }' > CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha
cd /root
mkdir -p /var/www/html
mv cdh6.3.2 /var/www/html
mv cm6.3.1 /var/www/html
#安装httpd服务
yum install -y httpd
#启动httpd服务
systemctl start httpd
#设置httpd服务开机启动
systemctl enable httpd
#查看httpd服务是否启动
ps -ef | grep httpd
vim /etc/yum.repos.d/os.repo
#以下为文件内容
[osrepo]
name=os_repo
baseurl=http://hadoop01/cm6.3.1
enabled=true
gpgcheck=false
#将os.repo文件copy到另外两台服务器上
scp /etc/yum.repos.d/os.repo hadoop02:/etc/yum.repos.d/os.repo
scp /etc/yum.repos.d/os.repo hadoop03:/etc/yum.repos.d/os.repo
#所有服务器都执行
yum repolist
#hadoop01主节点执行
vim /etc/httpd/conf/httpd.conf
#在<IfModule mime_module>中修改以下内容
#把第284行的 AddType application/x-gzip .gz .tgz 修改为:
AddType application/x-gzip .gz .tgz .parcel
#重启httpd服务
systemctl restart httpd
经过以上配置,下面网址可正常访问
http://hadoop01/cdh6.3.2/
http://hadoop01/cm6.3.1/
6、所有服务器安装JDK
第一步: 安装官方提供的JDK
yum install -y oracle-j2sdk1.8-1.8.0+update181-1.x86_64
第二步: 配置jdk的环境变量
vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=:$JAVA_HOME/bin:$PATH
source /etc/profile
第三步: 添加mysql驱动包
mkdir -p /usr/share/java
mv /root/mysql-connector-java-5.1.46.jar /usr/share/java/
cd /usr/share/java/
mv mysql-connector-java-5.1.46.jar mysql-connector-java.jar
注意:以上三步在所有服务器都要配置
四.Cloudera Manager部署
第一步:安装CM server及agent
#安装python27,解决安装过程中Hue无法访问数据库问题
yum install -y centos-release-scl
yum install -y python27 python27-devel
yum -y install cloudera-manager-daemons
yum -y install cloudera-manager-agent
#仅hadoop01服务器安装cloudera-manager-server
yum -y install cloudera-manager-server
第二步:所有节点修改agent配置
vim /etc/cloudera-scm-agent/config.ini
#修改文件中server_host的属性值
server_host=192.168.213.11
第三步:初始化scm数据库
#hadoop01主节点执行
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm scm
结果为:All done, your SCM database is configured correctly!
,表示初始化成功。
第四步:启动CM server及agent
#hadoop01主节点启动CM server
systemctl start cloudera-scm-server
#启动日志目录为/var/log/cloudera-scm-server/
cd /var/log/cloudera-scm-server/
tail cloudera-scm-server.log
#所有节点启动CM agent
systemctl start cloudera-scm-agent
web页面: http://hadoop01:7180/
默认登录账号: admin
默认登录密码: admin
五.WEB端配置
前面一路下一步
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hHmod7cX-1603437355815)(https://ae04.alicdn.com/kf/Hbfaaf81a6fab4bd88abf4f7182c8cca2A.png)]
选中三台节点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ejov1u7e-1603437355816)(https://ae02.alicdn.com/kf/He29b33b2fb6544fd9d372b95e9b84648M.png)]
继续
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AhGkTHk4-1603437355818)(http://ww1.sinaimg.cn/large/007ggQMSly1gjom4thpkdj30jg0agjsz.jpg)]
等待分配完成
输入数据库用户名密码
安装成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BEBoXuKl-1603437355819)(http://ww1.sinaimg.cn/large/007ggQMSly1gjxwv6ht8jj31hc0p2n0q.jpg)]在HDFS配置中关闭 检查HDFS权限 防止以后上传文件失败
六.安装Sqoop
1.在CDH添加Sqoop服务
2.安装并使用
#将ORACLE驱动jar拷贝到sqoop的lib目录下
解决方案:
安装之后 再次执行导入操作问题解决
1.导入Hive
#再次把表导入 导入成功
sqoop import \
-Dorg.apache.sqoop.splitter.allow_text_splitter=true \
--connect jdbc:oracle:thin:@localhost:1521:oracl \
--username 111111 \
--password 111111 \
--table ESB_CONTROL_LOG \
--num-mappers 3 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table ESB_CONTROL_LOG
2.导入Hbase
sqoop import \
-Dorg.apache.sqoop.splitter.allow_text_splitter=true \
--connect jdbc:oracle:thin:@localhost:1521:oracl \
--username 111111 \
--password 111111 \
--table ESB_CONTROL_LOG \
--num-mappers 3 \
--hbase-table msun:test3 \
--column-family cf1 \
--hbase-create-table \
--hbase-row-key CREATE_TIME \
--hbase-bulkload
参数 | 含义 |
---|---|
–hbase-table | 写入hbase中的表 |
–column-family | 导入的列簇 |
–hbase-create-table | 创建表 |
–hbase-row-key | 指定字段作为rowkey |
–hbase-bulkload | 启动Hbase 批量写入 |
3.JOIN表连接导入Hive
sqoop 导入 Hive 分三步:
- 先导入
--target-dir
指定的 HDFS 的目录中- 在 Hive 中建表
3. 调用 Hive 的LOAD DATA INPATH
把--target-dir
中的数据移动到 Hive 中
sqoop import \
-Dorg.apache.sqoop.splitter.allow_text_splitter=true \
--connect jdbc:oracle:thin:@localhost:1521:oracl \
--username ****** \
--password ****** \
--query 'select * from test WHERE $CONDITIONS' \
--num-mappers 3 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table test_esb \
--target-dir /data/sqoop/shop \
--split-by 'id'
4.定时增量导入Hive/关于增量同步
增量同步
对于数据量非常大的数据源,如果每次同步都是全量,对于 MySQL 的压力会特别大,同步需要的时间也会很长。因此需要一种可以每次只同步新增数据的机制,减少对于 MySQL 端的压力。但是增量同步不是没有代价的,它要求业务在设计业务逻辑和表结构的时候,满足下面任意条件:
- 只插入新数据,不做删除和修改(类似日志)
- 只有插入和更新操作,删除操作通过一个标志位的更新做软删除代替,同时数据库有一个字段用来标记该行记录最后更新的时间戳
如果满足上面条件,数据量比较大的表就可以采用增量同步的方式拉取。小数据量的表不需要考虑增量同步,因为数据和合并也需要时间,如果收益不大就不应该引入额外的复杂性。一个经验值是行数 <= 2000w 的都属于数据量比较小的表,具体还取决于存储的数据内容(比如有很多 Text 类型的字段)。
1.先全量抽取
sqoop import \
-Dorg.apache.sqoop.splitter.allow_text_splitter=true \
--connect jdbc:oracle:thin:@localhost:1521:oracle \
--username 111111 \
--password 111111 \
--query ' WHERE $CONDITIONS' \
--num-mappers 3 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table test_demo \
--target-dir /data/sqoop/shop \
--split-by 'ID'
2.创建Sqoop Job
sqoop job \
--create sqoop_job_msun \
-- import --connect jdbc:oracle:thin:@localhost:oracle \
--username 111111 \
--password 111111 \
--query 'SELECT * FROM test WHERE $CONDITIONS' \
--num-mappers 3 \
--hive-import \
--fields-terminated-by "\t" \
--hive-table test_demo \
--target-dir /data/sqoop/shop \
--split-by 'ID' \
--incremental append \
--check-column id \
--last-value 600000
3.执行Sqoop Job
sqoop job --exec sqoop_job_msun
4.如果设置错误可以删除重建
sqoop job --delete sqoop_job_msun
5.查看任务信息
sqoop job --show sqoop_job_order
6.编写定时任务Shell脚本
#创建一个.sh的程序
#!/bin/sh
. /etc/profile
. ~/.bash_profile
/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/sqoop/bin/sqoop job --exec sqoop_job_msun
crontab -e
*/30 * * * * /opt/sqoop_job_msun.sh >> /opt/sqoop_job.log 2>&1
- 如果脚本运行报错 /bin/bash^M: 坏的解释器: 没有那个文件或目录
执行
sed -i 's/\r$//' sqoop_job_msun.sh
七.安装Phoenix5.0.0
Phoenix的优势:
1.支持使用SQL查询Hbase
2.支持二级索引,事务,UDF,分页查询
3.支持完整的ACID事务
4.支持java、python的Driver
5.与MapReduce,spark,hive,pig,kafka,flume整合的很好
基于以上phoenix的特点可用于实现HTAP。
1.下载
https://archive.cloudera.com/phoenix/6.2.0/parcels/
https://archive.cloudera.com/phoenix/6.2.0/csd/
提前下载下面几个文件并放置在cdh主节点的/opt/cloudera/parcel-repo/下,PHOENIX-1.0.jar放置在/opt/cloudera/csd下
manifest.json
PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel
PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel.sha
2.启动httpd
systemctl start httpd
如果已启动则不需要再启动,访问主节点ip/phoenix看是否启动成功,若出现下面的界面则成功。
如果没有httpd就使用yum安装一下:
安装httpd:
yum install -y httpd
3.使用parcel安装Phoenix5
在CM中选择主机->Parcel–>配置.如果有未安装的parcel包,可以直接看到,选择它然后点击保存,点击’分配’–>‘激活’.
4.CM中添加Phoenix服务
1.先确定CSD配置目录是否是上面说的/opt/cloudera/csd,在CM中选择管理–>设置,搜索csd。
刚才第一步把下载的PHOENIX-1.0.jar放置在/opt/cloudera/csd下了,所以我们直接重启CM服务.
systemctl restart cloudera-scm-server
重新登录CM,重启Cloudera Management Service过期配置服务。
在之前的文章中我们知道phoenix是在hbase上实现了SQL接口,并且手工安装开源版phoenix的时候也需要在hbase节点的lib目录下放置phoenix的jar包,通过CM安装就免去这些手工的工作。
在Hbase–>配置 中搜索hbase-site,然后在"hbase-site.xml 的 HBase 服务高级配置代码段" 中配置如下内容。
或点击以XML格式查看,输入下面的代码:
<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
<property>
<name>phoenix.functions.allowUserDefinedFunctions</name>
<value>true</value>
<description>enable UDF functions</description>
</property>
<property>
<name>phoenix.schema.isNamespaceMappingEnabled</name>
<value>true</value>
</property>
<property>
<name>phoenix.schema.mapSystemTablesToNamespace</name>
<value>true</value>
</property>
修改完成后重启hbase服务。
6.启动Phoenix验证
启动phoenix命令行:
/opt/cloudera/parcels/PHOENIX/bin/phoenix-sqlline hbase节点1,hbase节点2,hbase节点3..
7.Phoenix映射HBase中已有的表
一.为什么要做映射?
本地安装好 Phoenix 之后,用 phoenix 的 !talblse
命令列出所有表,会发现 HBase 原有的表没有被列出来。而使用 Phoenix sql 的 CREATE
语句创建的一张新表,则可以通过 !tables
命令展示出来。
这是因为 Phoenix 无法自动识别 HBase 中原有的表,所以需要将 HBase 中已有的做映射,才能够被 Phoenix 识别并操作。说白了就是要需要告诉 Phoenix 一声 xx 表的 xx 列是主键,xx 列的数据类型。
二.操作
1. Hbase中建有命名空间的表
2. Phoenix映射操作
首先创建与命名空间对应的schema,如果不创建的话,会报错"Schema does not exist schemaName=binlog (state=43M05,code=722)"
首先创建与命名空间对应的schema,如果不创建的话,会报错"Schema does not exist schemaName=binlog (state=43M05,code=722)"
CREATE SCHEMA IF NOT EXISTS "msun";
- 映射视图view。视图只是供查询操作,不能修改数据,当删除视图的时候,对hbase中的源表不会有影响
CREATE VIEW "msun"."test3"(
"ROW" varchar primary key,
"cf1"."CREATE_TIME" varchar,
"cf1"."ID" varchar,
"cf1"."CONSUMER_PORT" varchar,
"cf1"."CONSUMER_SYSTEM_NAME" varchar,
"cf1"."INFO_CODE" varchar,
"cf1"."INFO_NAME" varchar
) column_encoded_bytes=0;
映射表table,表可以查询及修改数据,当删除表的时候,hbase中的源数据表也会被删除(view无法upsert ,table可以upsert)
CREATE TABLE "msun"."test3"(
"ROW" varchar primary key,
"cf1"."CREATE_TIME" varchar,
"cf1"."ID" varchar,
"cf1"."CONSUMER_PORT" varchar,
"cf1"."CONSUMER_SYSTEM_NAME" varchar,
"cf1"."INFO_CODE" varchar,
"cf1"."INFO_NAME" varchar
) column_encoded_bytes=0; //禁用列映射
映射成功
select * from "msun"."test3";
八.安装并配置Kylin
1.下载
官方下载地址:https://www.apache.org/dyn/closer.cgi/kylin/apache-kylin-3.1.1/apache-kylin-3.1.1-bin-cdh60.tar.gz
选取对应的镜像下载地址
2.安装
1.解压到指定目录
2.启动
1)启动 Kylin 之前,需先启动 Hadoop(hdfs,yarn,jobhistoryserver)、Zookeeper、Hbase
2)启动 Kylin
bin/kylin.sh start
1.进入WEB端
账号:ADMIN
密码:KYLIN
3.KYLIN的使用
1.创建工程
1)点击下图中的"+"。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hw7f58Hm-1603437355822)(http://ww1.sinaimg.cn/large/007ggQMSly1gjyzzo547qj31hc0p3gnx.jpg)]
2)填写项目名称和描述信息,并点击 Submit 按钮提交。
2.获取数据源
1)点击 DataSource
2)点击下图按钮导入 Hive 表
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JRWoPfR0-1603437355825)(C:\Users\Dell\AppData\Roaming\Typora\typora-user-images\image-20201023093007450.png)]
3)选择所需数据表,并点击 Sync 按钮
4.创建 model
1)点击 Models,点击"+New"按钮,点击"★New Model"按钮。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NVEpFB4S-1603437355826)(http://ww1.sinaimg.cn/large/007ggQMSly1gjz0lzn87lj31hc0p3gnr.jpg)]
2)填写 Model 信息,点击 Next
3)指定事实表
4)选择维度表,并指定事实表和维度表的关联条件,点击 OK
5)指定维度字段,并点击 Next
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qi25Go7i-1603437355829)(http://ww1.sinaimg.cn/large/007ggQMSly1gjz0tezr30j31hc0p3n0p.jpg)]
6)指定度量字段,并点击 Next
7)指定事实表分区字段(仅支持时间分区),点击 Save 按钮,model 创建完毕
5.构建 cube
1)点击 new, 并点击 new cube
2)填写 cube 信息,选择 cube 所依赖的 model,并点击 next
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YZ1T7nRX-1603437355831)(http://ww1.sinaimg.cn/large/007ggQMSly1gjz13h8rq3j31hc0p3whf.jpg)]
3)选择所需的维度,如下图所示
4)选择所需度量值,如下图所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T0qmJMIn-1603437355833)(http://ww1.sinaimg.cn/large/007ggQMSly1gjz14t1hqaj31hc0p3q5w.jpg)]
4)cube 自动合并设置,cube 需按照日期分区字段每天进行构建,每次构建的结果会保存在
Hbase 中的一张表内,为提高查询效率,需将每日的 cube 进行合并,此处可设置合并周期。
5)Kylin 高级配置(优化相关,暂时跳过)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZCpq1Sqa-1603437355834)(http://ww1.sinaimg.cn/large/007ggQMSly1gjz175hfi6j31hc0p3jvk.jpg)]
6)Kylin 相关属性配置覆盖
7)Cube 信息总览,点击 Save,Cube 创建完成
8)构建 Cube(计算),点击对应 Cube 的 action 按钮,选择 build
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l3o2nXkw-1603437355836)(C:\Users\Dell\AppData\Roaming\Typora\typora-user-images\image-20201023095700309.png)]
9)选择要构建的时间区间,点击 Submit
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z2K7drlm-1603437355836)(http://ww1.sinaimg.cn/large/007ggQMSly1gjz1bzlimhj31hc0p3acv.jpg)]
10)点击 Monitor 查看构建进度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ObfdcFjp-1603437355837)(http://ww1.sinaimg.cn/large/007ggQMSly1gjz1db5oflj31hc0p3gpm.jpg)]
6.报错问题解决
kylin : killed by admin
build cube时报这个错误,
这个时候我们无法定位问题,
但是从Yarn的作业中来查看:
MAP capability required is more than the supported max container capability in the cluster. Killing the Job. mapResourceRequest:
我们可以修改Kylin的配置文件conf/kylin_job_conf_inmem.xml减小对内存的申请大小:
将默认的参数(分配给map比较大的内存),如下:
<property>
<name>mapreduce.map.memory.mb</name>
<value>3072</value>
<description></description>
</property>
<property>
<name>mapreduce.map.Java.opts</name>
<value>-Xmx2700m</value>
<description></description>
</property>1234567891011121314
将map的内存大小修改小一点,如下:
<property>
<name>mapreduce.map.memory.mb</name>
<value>1024</value>
<description></description>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx900m</value>
<description></description>
</property>1234567891011
修改完成后,不用重启Kylin,只要重新提交失败的作业即可。
九.常见问题处理
1.修改HDFS文件权限出错
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IeUPBhFS-1603437355837)(http://ww1.sinaimg.cn/large/007ggQMSly1gjumcznpc3j30sk036aa8.jpg)]
解决办法:
su hdfs
比如我是 su hdfs的时候出现的问题
用cat看看 apache的帐号信息
# cat /etc/passwd | grep apache
发现它的shell是“/sbin /nologin”,需要改成“/bin/bash”
# vi /etc/passwd
修改完毕后,保存退出
这 样再 su hdfs就可以很容易进去了
sudo -u hdfs hadoop fs -mkdir /user/root 我们可以以hdfs的身份对文件进行操作
2.调用Impala查询Hive数据
INVALIDATE METADATA;
执行上述命令同步元数据
the supported max container capability in the cluster. Killing the Job. mapResourceRequest:
我们可以修改Kylin的配置文件conf/kylin_job_conf_inmem.xml减小对内存的申请大小:
将默认的参数(分配给map比较大的内存),如下:
<property>
<name>mapreduce.map.memory.mb</name>
<value>3072</value>
<description></description>
</property>
<property>
<name>mapreduce.map.Java.opts</name>
<value>-Xmx2700m</value>
<description></description>
</property>1234567891011121314
将map的内存大小修改小一点,如下:
<property>
<name>mapreduce.map.memory.mb</name>
<value>1024</value>
<description></description>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx900m</value>
<description></description>
</property>1234567891011
修改完成后,不用重启Kylin,只要重新提交失败的作业即可。
九.常见问题处理
1.修改HDFS文件权限出错
[外链图片转存中…(img-IeUPBhFS-1603437355837)]
解决办法:
su hdfs
比如我是 su hdfs的时候出现的问题
用cat看看 apache的帐号信息
# cat /etc/passwd | grep apache
发现它的shell是“/sbin /nologin”,需要改成“/bin/bash”
# vi /etc/passwd
修改完毕后,保存退出
这 样再 su hdfs就可以很容易进去了
sudo -u hdfs hadoop fs -mkdir /user/root 我们可以以hdfs的身份对文件进行操作
2.调用Impala查询Hive数据
INVALIDATE METADATA;
执行上述命令同步元数据