openLooKeng性能优化赛题指导书
本教程只作为openLooKeng性能优化赛题单机测试环境Hive+Hadoop+MySQL+openLooKeng运行TPC-DS参考教程,如有任何使用问题,欢迎在openLooKeng比赛群,openLooKeng用户交流微信群以及openLooKeng slack频道中提问和交流。
1 环境及安装包信息
-
- 系统
推荐使用CentOS Linux release 7.6(查看命令cat /etc/centos-releas)64位(查看命令uname -a)。 - 准备安装包
- 推荐使用JDK 1.8版本
- 系统
oracle官网下载,下载地址:
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html(需要注册oracle账号)
点击链接,选择jdk-8u161-linux-x64.tar.gz或jdk-8u261-linux-x64.tar.gz。
linux 64 jdk1.8 jdk-8u161-linux-x64.tar.gz百度网盘下载链接:
https://pan.baidu.com/s/18IicPYf7W0j-sHBXvfKyyg (需登陆百度网盘账号)
-
-
- hdoop3.1.3下载
-
单击下面链接即可下载
https://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz
1.2.3 hive3.1.2下载
http://mirror.bit.edu.cn/apache/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
1.2.4 mysql下载
安装MySQL主要有两种方法:一种是通过源码自行编译安装,这种适合高级用户定制MySQL的特性,这里不做说明;另一种是通过编译过的二进制文件进行安装。二进制文件安装的方法又分为两种:一种是不针对特定平台的通用安装方法,使用的二进制文件是后缀为.tar.gz的压缩文件;
第二种是使用RPM或其他包进行安装,这种安装进程会自动完成系统的相关配置,所以比较方便。
登陆linux服务器,进入/opt目录下,执行下面命令,即可在/opt目录上获取相应的rpm包。
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-community-client-5.7.25-1.el7.x86_64.rpm
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-community-libs-5.7.25-1.el7.x86_64.rpm
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-community-common-5.7.25-1.el7.x86_64.rpm
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-community-server-5.7.25-1.el7.x86_64.rpm
mysql 驱动包:https://downloads.mysql.com/archives/c-j/
选择mysql-connector-java-5.1.48.tar.gz或mysql-connector-java-5.1.48.zip,与mysql版本对应否则初始化数据库失败,如下图所示先选择版本,再选择系统。
1.2.5 将上面得到的包从本地上传到Linux服务器的/opt目录下,如下图所示
2 节点免密配置
2.1 输入命令:ssh-keygen[Enter][Enter][Enter]
(连续三次回车,即在/root/.ssh/目录下生成了公钥和私钥)
执行命令:cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys (将id_rsa.pub的内容追加到 authorized_keys 中, 注意不要用 > ,否则会清空原有的内容,使其他人无法使用原有的密钥登录)。
2.2 查看是否能免密登陆
ssh 后面跟上本机ip或者本机主机名。
3 安装jdk
3.1 将压缩包解压到/opt目录
在/opt目录下执行:tar -zxvf jdk-8u161-linux-x64.tar.gz(这里以版本8u161为例,后续涉及到jdk路径的,根据实际路径配置) 。
3.2 配置环境变量
vi /etc/profile,在文件里添加如下内容
#java config
export JAVA_HOME=/opt/jdk1.8.0_161
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
保存并退出后,执行source /etc/profile加载环境变量。
3.3 验证jdk是否安装成功
执行 java -version,有如下版本信息回显则安装成功。
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
4 安装hadoop
4.1 解压hadoop压缩包
在/opt目录下执行 tar -zxvf hadoop-3.1.3.tar.gz。
4.2 配置环境变量
在文件中添加如下内容
vi /etc/profile
#hadoop config
export HADOOP_HOME=/opt/hadoop-3.1.3
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS__HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path"=$HADOOP_HOME/lib
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
保存并退出后,执行source /etc/profile加载环境变量
4.3 修改配置文件
进入解压后的hadoop目录: cd /opt/hadoop-3.1.3/etc/hadoop/
注:配置文件中涉及到的ip和主机名换成自己的服务的ip和主机名
4.3.1 修改core-site.xml,配置内容如下,
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://ip:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/data/tmp</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>ipc.client.fallback-to-simple-auth-allowed</name>
<value>true</value>
</property>
</configuration>
4.3.2 修改hdfs-site.xml,配置内容如下
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/hadoop/data1</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
4.3.3 修改mapred-site.xml,配置内容如下
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
</configuration>
4.3.4 修改yarn-site.xml,配置内容如下
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>用户主机名</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>5</value>
</property>
</configuration>
4.3.5 修改hadoop-env.sh,配置内容如下
export JAVA_HOME=/opt/jdk1.8.0_161
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
4.4 启动hadoop
4.4.1 格式化namenode
进入bin目录(/opt/hadoop-3.1.3/sbin)执行:./hdfs namenode -format
4.4.2 启动
进入sbin(/opt/hadoop-3.1.3/bin)目录执行:./start-all.sh启动hdfs全部服务,也可以执行./start-yarn.sh,./start-dfs.sh单独启动。
执行命令检查是否安装成功:hdfs dfs -ls /
若出现下面警告:
可以在log4j日志中去除告警信息。
vi /opt/hadoop-3.1.3/etc/hadoop/log4j.properties
在文件最后一行加入:
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
再运行命令,显示一切正常
5 安装mysql
5.1 卸载旧的数据库
执行:rmp -qa |grep mariadb或者rmp -qa |grep mysql查询安装信息
没有回显则跳过,有回显则执行卸载命令:rpm -e --nodeps 回显内容
再次执行rmp -qa |grep mariadb或者rmp -qa |grep mysql确认已经卸载完成
5.2 安装新的数据库
安装的顺序为common>>libs>>client>>server在/opt目录下依次执行:
rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm
rmp -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm
若系统提示缺少libaio,则下载libaio,地址如下:
http://mirror.centos.org/centos/7/os/x86_64/Packages/libaio-0.3.109-13.el7.x86_64.rpm
安装:rpm -ivh libaio-0.3.109-13.el7.x86_64.rpm
5.3 启动mysql
执行systemctl start mysqld.service启动mysql服务
执行systemctl status mysqld.service查看mysql服务状态
5.4 登陆mysql服务
5.4.1 获取初始密码
cat /var/log/mysqld.log |grep password
登陆mysql服务:mysql -u root -p 按下enter键,输入上面获取的密码
5.4.2 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password' 注意密码需要有大小写字母数字
若上述方式不行,则按执行下面的命令修改密码:
set global validate_password_policy=0;
set global validate_password_length=1;
alter user user() identified by " new password ";
5.4.3授权远程登录
grant all on *.* to root@'%' identified by 'new password'
刷新权限:flush PRIVILEGES;
5.4.4 新建schema
create schema hive;
6 安装hive
6.1 解压hive 压缩包
在/opt/目录下执行:tar -zxvf apache-hive-3.1.2-bin.tar.gz
6.2 配置环境变量
修改解压后的目录名称:mv apache-hive-3.1.2-bin hive-3.1.2
配置文件里添加如下内容
#hive config
export HIVE_HOME=/opt/hive-3.1.2
export HIVE_CONF_DIR=/opt/hive-3.1.2/conf
export PATH=$PATH:$HIVE_HOME/bin
保存并退出后,执行source /etc/profile加载环境变量
6.3 修改配置文件
cd /opt/hive-3.1.2/conf
6.3.1 新建一个名为:hive-site.xml文件,配置内容如下,
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://ip:3306/hive?createDatabaseIfNotExists=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>mysql 用户名</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>mysql 密码</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://ip:9083</value>
</property>
<property>
<name>hive.exec.dynamic.partition.mode</name>
<value>nonstrict</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value/>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.logging.operation.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/tmp/operation_logs</value>
</property>
</configuration>
6.4 hdoop上面创建文件夹并修改权限
hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -mkdir -p /tmp
hdfs dfs -chmod 777 /user/hive/warehouse
hdfs dfs -chmod 777 /tmp
6.5 将hadoop下的core-site.xml和hdfs-site.xml文件复制到hive配置文件下
执行:
cp/opt/hadoop-3.1.3/etc/hadoop/core-site.xml /opt/hive-3.1.2/conf/
cp /opt/hadoop-3.1.3/etc/hadoop/hdfs-site.xml /opt/hive-3.1.2/conf/
6.6 启动hive
6.6.1 初始化数据库
1)为了避免hadoop和hive中的guava版本冲突,需要将hadoop中的guava-27.0.jar拷贝到hive的lib目录下,删除hive原来的版本
cp -f /opt/hadoop-3.1.3/share/hadoop/common/lib/guava-27.0-jre.jar /opt/hive-3.1.2/lib/
rm -f /opt/hive-3.1.2/lib/guava-19.0.jar
2)拷贝mysql驱动
unzip mysql-connector-java-5.1.48.zip
cp /opt/mysql-connector-java-5.1.48/mysql-connector-java-5.1.48-bin.jar /opt/hive-3-1.2/lib
3)初始化数据库
schematool -dbType mysql -initSchema
6.6.2后台启动服务
执行:nohup hive --service metastore >metastore.log &
启动后使用hive命令进入客户端,进行增删改查操作,如果没有报错,则继续执行
nohup hive --service hiveserver2 >server2.log &
其中上述的日志文件metastore.log、server2.log自己指定路径
6.6.3 登陆客户端
beeline -u jdbc:hive2://127.0.0.1:10000
默认日志路径是:/tmp/root/hive.log
7 安装openLooKeng
参考文档:
https://openlookeng.io/docs/docs/installation/deployment.html
7.1 下载并解压安装包
https://openlookeng.io/zh-cn/download.html 下载hetu-server-1.0.1.tar.gz
进入/opt目录,执行解压命令,将openLooKeng安装包解压到/opt路径
7.2 手动配置
进入安装目录,和bin目录同一级建etc目录,进入新建的etc目录
7.2.1 新建config.properties
vi config.properties
填入以下内容
coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8090
query.max-memory=15GB
query.max-total-memory=15GB
query.max-memory-per-node=15GB
query.max-total-memory-per-node=15GB
discovery-server.enabled=true
discovery.uri=http://ip:8090
experimental.spill-enabled=false
experimental.reserved-pool-enabled=false
memory.heap-headroom-per-node=6GB
task.concurrency=16
node-scheduler.max-splits-per-node=100
#node-scheduler.max-pending-splits-per-node=10
query.low-memory-killer.policy=total-reservation-on-blocked-nodes
join-max-broadcast-table-size=100MB
query.initial-hash-partitions=1000
query.max-stage-count=200
#double chek disk space
experimental.max-spill-per-node=16GB
experimental.query-max-spill-per-node=25GB
#dynamic-filtering
enable-dynamic-filtering=true
dynamic-filtering-max-per-driver-size=100MB
dynamic-filtering-max-per-driver-row-count=10000
#execution paln cache
#experimental.enabled-execution-plan-cache=true
hetu.executionplan.cache.enabled=true
hetu.executionplan.cache.limit=10000
hetu.executionplan.cache.timeout=86400000
hetu.split-cache-map.enabled=true
7.2.2 新建node.properties
node.environment=hetu
node.id=f19azsdf-4425-2xcv-qwer-fiop2dfsasdf(必须唯一)
node.data-dir=/opt/hetu-server-1.0.1/data(实际情况填写,servers.log的存在路径)
7.2.3 新建log.properties
io.prestosql=INFO
7.2.4 新建jvm.config
-server
-Xmx22G
-XX:-UseBiasedLocking
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+ExplicitGCInvokesConcurrent
-XX:+ExitOnOutOfMemoryError
-XX:+UseGCOverheadLimit
-XX:+HeapDumpOnOutOfMemoryError
-XX:ReservedCodeCacheSize=512M
-Djdk.attach.allowAttachSelf=true
-Djdk.nio.maxCachedBufferSize=2000000
建议:
上述配置中Xmx的值,建议取max(availableMen–30G, availableMen * 0.7)。
并且配置文件config.properties下面几个参数可根据Xmx的值来配
query.max-memory= JVM*0.7
query.max-memory-per-node= JVM*0.7
query.max-total-memory-per-node= JVM*0.7
memory.heap-headroom-per-node= JVM*0.3
7.2.5 新建catalog/hive.properties
在/etc目录下执mkdir catalog,进入catalog目录,新建hive.properties,填入以下内容
ip:填的是数据源ip
connector.name=hive-hadoop2
hive.metastore.uri=thrift://ip:9083
hive.config.resources=/opt/conf/core-site.xml,/opt/conf/hdfs-site.xml(数据源文件目录)
hive.max-partitions-per-writers=100000
7.2.6 新建catalog/tpcds.properties
connector.name=tpcds
7.3 启动openLooKeng
进入bin目录下,执行./launcher start
启动日志查看:vi /opt/hetu-server-1.0.1/data/var/log/server.log
7.4 使用openLooKeng
登陆openLooKeng客户端命令:
java -jar /opt/hetu-server-1.0.1/bin/hetu-cli-1.0.1-executable.jar --server http://ip:8090 --catalog catalog_name
catalog_name:对应/catalog下的文件名
进入后,可进行正常的增删该查操作
7.5 跑tpcds
7.5.1 下载tpcds包
https://github.com/hortonworks/hive-testbench/archive/hdp3.zip
unzip hive-testbench-hdp3.zip
cd hive-testbench-hdp3
7.5.2编译
下载配置Maven download:https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
vi /etc/profile
export M2_HOME=/opt/apache-maven-3.6.3
export PATH=$PATH:$HIVE_HOME/bin
./tpcds-build.sh(如果编译失败,请重新编译)
7.5.3生成数据
- 执行生成数据命令前,需要修改tpcds-setup.sh文件,将原有进入hive的命令改成对应进入命令
文件原来命令如下:
这里改成对应自己进入beeline命令,如:
HIVE="beeline -u jdbc:hive2://127.0.0.1:10000"
脚本中字符‘#’表示该行‘#’后面的内容已被注释。
- 修改hdfs上面/tmp以及以下的目录权限为777
hdfs dfs -chmod -R 777 /tmp
- 执行数据生成命令:./tpcds-setup.sh 10 //生成10G的hive表数据集(默认生成orc格式的表,至少1G)
备注:如果上述生成数据失败,那么可以通过openLooKeng中的catalog tpcds生成数据,如执行如下sql
create table hive.tpcds_1.date_dim as select * from tpcds.sf1.date_dim;
其中需要先创建hive的schema “tpcds_1”,catalog tpcds的schema “sf1”是指tpcds的数据量为1GB。
7.5.4 使用脚本运行tpcds
在/opt下面新建一个脚本,vi run_tpcds.sh,用来跑tpcds并记录时间
需要根据实际生成ip及端口修改脚本中对应ip和端口号(对应行号68/71)
生成tpcds数据对应schema在文件开头处修改变量schema(对应行号5)。
7.5.6准备sql
将该文件解压放置于/opt目录下
执行nohup sh run_tpcds.sh -p /opt/sql_10GB >mylog.log &
或者直接执行sh run_tpcds.sh -p /opt/sql_10GB
8 重新编译openLooKeng
- 下载并编译openLooKeng代码依赖git以及maven, openLooKeng对编译环境的要求如下:
-
-
- Mac OS X或Linux
- Java 8 Update 161或更高版本(8u161+)(64位)。同时支持Oracle JDK和OpenJDK
- Maven 3.3.9+(用于构建)
- Python 2.4+(与启动器脚本一起运行)
-
-
可以用git --version以及mvn -version查看版本,可以使用yum install maven命令安装maven
- 下载openLooKeng代码:
git clone -b 1.0.1 https://gitee.com/openlookeng/hetu-core.git
mvn clean install -DskipTests=true -Dfast -T 2C -Dmaven.compile.fork=true
- 对于openLooKeng IDE的编译,可以参考openLooKeng官方社区文档:
https://openlookeng.io/zh-cn/docs/docs/develop/getting-started.html
- 在对openLooKeng的代码进行修改之后,需要对工程进行重编译生成新的openLooKeng tar.gz包。在hetu-core目录下,使用maven进行编译打包,mvn clean install -DskipTests=true -Dfast -T 2C -Dmaven.compile.fork=true,在hetu-server/target下会编译生成hetu-server-010.tar.gz包。如果想要进行本地验证,可以参考安装openLooKeng章节重新进行新包部署。
9 了解更多openLooKeng细节请访问官方文档:https://openlookeng.io
10 环境安装FAQ