Kylin OLAP 综合解决方案环境部署及双引擎切换实践

编程入门 行业动态 更新时间:2024-10-07 06:51:21

Kylin OLAP 综合<a href=https://www.elefans.com/category/jswz/34/1770581.html style=解决方案环境部署及双引擎切换实践"/>

Kylin OLAP 综合解决方案环境部署及双引擎切换实践

本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。期待加入IOT时代最具战斗力的团队。QQ邮箱地址:1120746959@qq,如有任何学术交流,可随时联系。

0 初期运维实践

1 [root@Master conf]# netstat -an|grep 8050tcp6       0      0 10.44.219.80:8050       :::*                    LISTEN  [root@Master conf]# netstat -apn | grep 8088tcp6       0      0 :::8088                 :::*                    LISTEN      2468/java 2 此处是替换aaa.xml中的localhost,把他替换成qinkaixinMaster=qinkaixinsed "s/localhost/"$Master"/g"  aaa.xml  > bbb.xml3 Kubernates运维实践:1:进入pod:kubectl exec web-67c6b4476c-hds7q  -it /bin/bash2:查看版本:kubectl version3:得到node节点:kubectl get nodes4:将一个镜像运行起来kubectl run sonarqube --image=192.168.32.131:5000/sonarqube:5.6.5 --replicas=1 --port=90005:得到deployment列表kubectl get deployment6:得到pods列表kubectl get pods -o wide7:删除一下创建的对象kubectl delete pods sonarqube-7c45b4d4bb-d8w9v8:查看pod日志:kubectl logs sonarqube-7c45b4d4bb-b77q6 -f9:进入Pod,exec命令用于到容器中执行一条命令kubectl exec web-67c6b4476c-hds7q hostname10:更为常用的方式则是登陆到pod中,在有条件的时候,进行故障发生时的现场确认kubectl exec -it web-67c6b4476c-hds7q /bin/bash11:需要看整体的全部信息的时候kubectl cluster-infoKubernetes master is running at  is running at :dns/proxy12:对service按照名字进行过滤kubectl get service |grep nginx13:kubectl apply 来使用文件或者标准输入来更改配置信息  -->修改kubectl apply -f nginx/nginx.yaml14:kubectl scale 实现deployment实现扩缩容  当前副本数为3,扩容副本数kubectl scale --current-replicas=3 --replicas=6 deployment/nginxdeployment 
复制代码

本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。期待加入IOT时代最具战斗力的团队。QQ邮箱地址:1120746959@qq,如有任何学术交流,可随时联系。

1 Kylin的配置(启动StandAlone模式)

1 kylin.properties

kylin.env.hadoop-conf-dir=/usr/local/soft/install/hadoop-2.7.6/etc/hadoop/
kylin.server.query-metrics2-enabled=true
kylin.metrics.reporter-query-enabled=true
kylin.metrics.reporter-job-enabled=true
kylin.metrics.monitor-enabled=true
kylin.web.dashboard-enabled=true##kylin.engine.spark-conf.spark.master=yarn
kylin.engine.spark-conf.spark.master=spark://Master:7077
kylin.engine.spark-conf.spark.dynamicAllocation.enabled=falsekylin.engine.spark-conf.spark.driver.memory=2G
kylin.engine.spark-conf.spark.executor.memory=6G 
kylin.engine.spark-conf.spark.executor.cores=6kylin.engine.spark-conf.sparkwork.timeout=600
kylin.engine.spark-conf.spark.shuffle.service.enabled=false
kylin.engine.spark.rdd-partition-cut-mb=10
kylin.engine.spark-conf.spark.yarn.archive=hdfs://Master:9000/kylin/spark/spark-libs.jar
复制代码

2:建立样本

./sample.sh       建立实验样本
./kylin.sh start  启动
复制代码

3: kylin 中间数据清理:

./kylin.sh org.apache.kylin.storage.hbase.util.StorageCleanupJob --delete true
复制代码

本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。期待加入IOT时代最具战斗力的团队。QQ邮箱地址:1120746959@qq,如有任何学术交流,可随时联系。

2 spark 配置

1 spark-defaults.conf

spark.eventLog.enabled  true
spark.eventLog.dir      hdfs://Master:9000/spark-events
spark.eventLogpress true
spark.yarn.jars=hdfs://Master:9000/sparkJars/jars/*2 spark-env.sh
export JAVA_HOME=/usr/local/soft/install/jdk1.8.0_171
export SPARK_MASTER_IP=Master
export SPARK_WORKER_CORES=8
export SPARK_WORKER_MEMORY=7g
export SPARK_EXECUTOR_MEMORY=6g
export SPARK_MASTER_PORT=7077
export SPARK_EXECUTOR_INSTANCES=1
export SPARK_WORKER_INSTANCES=1
export SPARK_MASTER_WEBUI_PORT=8080
export HADOOP_CONF_DIR=/usr/local/soft/install/hadoop-2.7.6/etc/hadoop
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=50 -Dspark.history.fs.logDirectory=hdfs://Master:9000/spark-events"
复制代码

3 软连接hive-site.xml

4 拷贝Mysql jar包到jars

5 把Spark的jar包放在指定目录,kylin要使用

jar cv0f spark-libs.jar -C $SPARK_HOME/jars/ .
hadoop fs -mkdir -p /kylin/spark/
hadoop fs -put spark-libs.jar /kylin/spark/
复制代码

5:拷贝Spark的jar包放在/sparkJars/jars/中,Yarn要使用

hadoop fs -mkdir -p /sparkJars/jars/
hadoop fs -put jars/* /sparkJars/jars/
复制代码

6 Spark join

hive维度表
create external table customer( 
id string,
base_create_time string,
base_last_update_time string, 
customer_code  string, 
customized_domain  string, 
b_full_name string,
b_title string, 
b_two_domain string,
user_id string, 
user_name string,
company_id string
)partitioned by (env String) row format delimited fields terminated by '|';spark.sql("use accesslog")
spark.sql("load data inpath '/DB_warehouse/customer/' overwrite into table customer partition (env='dev')")
val left =spark.sql("select host, count(*) as total from accesslog a group by host order by total desc limit 5")case class LeftcaseFrame(host:String,total:Long)
val leftDs=left.as[LeftcaseFrame]去除host第一行的空格
val joinleft=leftDs.map(a => LeftcaseFrame(a.host.substring(1), a.total))
val joinright=spark.sql("select distinct * from elev")joinleft.join(joinright,joinleft("host")===joinright("sub_domain"),"outer").show
joinleft.join(joinright,joinleft("host")===joinright("sub_domain"),"left_outer").showMysql聚合分析:
val jdbc =spark.read.format("jdbc") .option("url", "jdbc:mysql://192.168.1.160:3306/test").option("dbtable", "tb_customer").option("user", "root").option("password", "123").load()
复制代码

7:spark的启动

spark-shell --master spark://bd-master:7077 --total-executor-cores 40 --executor-memory 4096m --executor-cores 4
spark-shell --master yarn --executor-memory 4096m --num-executors 10 --executor-cores 4
复制代码

8 spark-submit standalone集群模式之client模式:

./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077 --executor-memory 512m --num-executors 3 ./examples/jars/spark-examples_2.11-2.0.0.jar 100
复制代码

9.local单机模式:

    ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master local[1]./examples/jars/spark-examples_2.11-2.0.0.jar 10
复制代码

10: 打包提交应用程序

注意 参数顺序:1:class 2: 运行方式3: jar包位置4:输入参数15:输入参数26:运行内存
复制代码

10: spark-submit调试,此处运行的是Spark自带Streaming的例子,采用的提交方式是这个:

./bin/spark-submit --class  org.apache.spark.examples.streaming.NetworkWordCount  --master spark://master:7077 --executor-memory 512m --num-executors 3  ./examples/jars/spark-examples_2.11-2.0.0.jar localhost 9999
复制代码

3 hive

home: /usr/local/soft/cdh_support/hive-1.1.0-cdh5.9.3/conf

1 配置hive-site.xml

  <property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://Master:3306/metastore?createDatabaseIfNotExist=true</value></property><property><name>javax.jdo.option.ConnectionUserName</name><value>root</value></property><property><name>javax.jdo.option.ConnectionPassword</name><value>123456</value></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value></property>
复制代码

2 :定义日志路径

mkdir -p /log_all/hive
chown admin:admin /log_all/hive
复制代码

3:数据库初始化

在mysql中hive的schema(在此之前需要创建mysql下的hive数据库)
schematool -dbType mysql -initSchema
复制代码

4:拷贝mysql的驱动

复制mysql的驱动到hive/lib下面
复制代码

5 启动

home /usr/local/soft/cdh_support/hbase-1.2.0-cdh5.9.3
hive --service metastore   --presto启动需要
$HIVE_HOME/bin/hiveserver2 &  --zeeplin启动需要
复制代码

6: 配置事务

<property><name>hive.support.concurrency</name><value>true</value>
</property>
<property><name>hive.exec.dynamic.partition.mode</name><value>nonstrict</value>
</property>
<property><name>hive.txn.manager</name><value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
<property><name>hivepactor.initiator.on</name><value>true</value>
</property>
<property><name>hivepactor.worker.threads</name><value>1</value>
</property>
复制代码

7 :建立事务测试

use test;
create table t1(id int, name string) 
clustered by (id) into 8 buckets 
stored as orc TBLPROPERTIES ('transactional'='true');insert into t1 values (1,'aaa');
insert into t1 values (2,'bbb');
update t1 set name='ccc' where id=1;
delete from t1 where id=2; 
复制代码

8 hive-env.sh

export JAVA_HOME=/usr/local/soft/install/jdk1.8.0_171
export HADOOP_HOME=/usr/local/soft/cdh_support/hadoop-2.6.0-cdh5.9.3
export HIVE_CONF_DIR=/usr/local/soft/cdh_support/hive-1.1.0-cdh5.9.3/conf
复制代码

9 流程案例测试

    #local to hive
hive -e "USE bd_device_health; LOAD DATA LOCAL INPATH '/root/opendir/cdDataTemp/"HtData`date +%Y%m%d`"/cdonline' OVERWRITE INTO TABLE cdonline_tds;" >>/root/opendir/test-data/LocalToHive.log
复制代码

本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。期待加入IOT时代最具战斗力的团队。QQ邮箱地址:1120746959@qq,如有任何学术交流,可随时联系。

4 hbase

1:部署zookeeper,设置路径

mkdir -p /zookeeper/dataDir
chown admin:admin /zookeeper/dataDir
复制代码

2:配置 hbase-site.xml:

    <property><name>hbase.rootdir</name><value>hdfs://Master:9000/hbase</value></property><property><name>hbase.cluster.distributed</name><value>true</value></property><property><name>hbase.master</name><value>60000</value></property><property><name>hbase.zookeeper.property.clientPort</name><value>2181</value></property><property><name>hbase.zookeeper.quorum</name><value>Master,Worker1,Worker2</value></property><property><name>hbase.zookeeper.property.dataDir</name><value>/zookeeper/dataDir</value></property><property><name>hbase.rpc.controllerfactory.class</name><value>org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory</value></property>
复制代码

3 建立软连接core-site.xml 和 hdfs-site.xml

ln -s /usr/local/soft/cdh_support/hadoop-2.6.0-cdh5.9.3/etc/hadoop/core-site.xml 
ln -s /usr/local/soft/cdh_support/hadoop-2.6.0-cdh5.9.3/etc/hadoop/hdfs-site.xml
复制代码

4:传送

scp -r hadoop-2.6.0-cdh5.9.3  Worker2:/usr/local/soft/cdh_support/hbase-1.2.0-cdh5.9.3
复制代码

5 查看

http://master:60010/master-status(老版本)
http://master:16010/master-status(新版本)
复制代码

6 配置 hbase-env.sh

7 配置regionservers

Master
Worker1
Worker2
复制代码

8 Hbase启动服务

zkServer.sh start:注意先启动zookeeper
$ bin/hbase-daemon.sh start master 
$ bin/hbase-daemon.sh start regionserver
或者:
$ bin/start-hbase.sh
对应的停止命令:
$ bin/stop-hbase.sh./hbase-daemon.sh start thrift
复制代码

5 hadoop

1 home

/usr/local/soft/cdh_support/hadoop-2.6.0-cdh5.9.3
cd /usr/local/soft/cdh_support
复制代码

2 log所在地:

mkdir -p /log_all/hadoop
复制代码

3 metaData所在地:

mkdir -p /hadoop/datanode
mkdir -p /hadoop/namenodechown admin:admin /log_all/hadoop
chown admin:admin /hadoop/datanode
chown admin:admin /hadoop/namenode
复制代码

4 core-site.xml:

    	<property><name>hadoop.tmp.dir</name><value>/log_all/hadoop</value></property><property><name>fs.defaultFS</name><value>hdfs://Master:9000</value></property>	
复制代码

5 hdfs-site.xml:

       <!-- 指定HDFS副本的数量 --><property><name>dfs.replication</name><value>3</value></property><property>  <name>dfs.datanode.max.xcievers</name>  <value>8192</value>  </property>  <property><name>dfs.datanode.data.dir</name><value>file:/hadoop/datanode</value></property><property><name>dfs.namenode.datanode.registration.ip-hostname-check</name><value>false</value></property><property><name>dfs.namenode.name.dir</name><value>file:/hadoop/namenode</value></property><property><name>dfs.permissions</name><value>false</value></property>
复制代码

6 yarn-site.xml:

    <property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name><value>org.apache.hadoop.mapred.shuffleHandler</value></property><property><name>yarn.resourcemanager.resource-tracker.address</name><value>Master:8025</value></property><property><name>yarn.resourcemanager.scheduler.address</name><value>Master:8030</value></property><property><name>yarn.resourcemanager.address</name><value>Master:8050</value></property><property>  <name>yarn.nodemanager.pmem-check-enabled</name>  <value>false</value>  </property>  <property>  <name>yarn.nodemanager.vmem-check-enabled</name>  <value>false</value>  </property>  <property>  <name>yarn.nodemanager.resource.memory-mb</name>  <value>40960</value>  </property>  <property>  <name>yarn.scheduler.minimum-allocation-mb</name>  <value>4096</value>  </property><property>  <name>yarn.nodemanager.resource.cpu-vcores</name>  <value>10</value>  </property>    <property>  <name>yarn.nodemanager.vmem-pmem-ratio</name>  <value>2.1</value>  </property> <property>
&emsp;&emsp;   <name>hadoop.proxyuser.admin.hosts</name>
&emsp;   &emsp;<value>*</value></property><property>
&emsp; &emsp;  <name>hadoop.proxyuser.admin.groups</name>
&emsp;   &emsp;<value>*</value></property> scp -r hadoop-2.6.0-cdh5.9.3  Worker2:/usr/local/soft/cdh_support
scp -r hadoop-2.6.0-cdh5.9.3  Worker1:/usr/local/soft/cdh_support
复制代码

7 hadoop - env. sh:

8 mapred-site.xml

    <property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapred.job.tracker</name><value>master:54311</value></property>
复制代码

9 启动

hadoop namenode -format
mr-jobhistory-daemon.sh start historyserverHadoop均衡和安全模式 8088 50070
hadoop namenode -format
hadoop dfsadmin -safemode leave
hdfs dfsadmin -refreshNodes
start-balancer.sh
复制代码

6 telnet

telnet安装:
yum install telnet-server.x86_64 –y
rpm -qa | grep telnet  
yum -y install telnet
rpm -qa | grep telnet
复制代码

本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。期待加入IOT时代最具战斗力的团队。QQ邮箱地址:1120746959@qq,如有任何学术交流,可随时联系。

7 Flume

1:Socket模拟实验:

a1.sources = r1
a1.sinks = k1
a1.channels = c1a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444a1.sinks.k1.type = loggera1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1$ bin/flume-ng agent --conf conf/ --name a1 --conf-file conf/flume-telnet.conf 
-Dflume.root.logger==INFO,consoletelnet localhost 44444
复制代码

2:日志动态并上传到Hdfs监听:

拷贝Hadoop相关jar到Flume的lib目录下

share/hadoop/common/lib/hadoop-auth-2.5.0-cdh5.3.6.jar
share/hadoop/common/lib/commons-configuration-1.6.jar
share/hadoop/mapreduce1/lib/hadoop-hdfs-2.5.0-cdh5.3.6.jar
share/hadoop/common/hadoop-common-2.5.0-cdh5.3.6.jar
复制代码

创建flume-hdfs.conf文件

a2.sources = r2
a2.sinks = k2
a2.channels = c2a2.sources.r2.type = exec
a2.sources.r2mand = tail -f /usr/local/soft/log_all/hive/hive.log
a2.sources.r2.shell = /bin/bash -ca2.sinks.k2.type = hdfs
a2.sinks.k2.hdfs.path = hdfs://Master:9000/flume/%Y%m%d/%H
#上传文件的前缀
a2.sinks.k2.hdfs.filePrefix = events-hive-
#是否按照时间滚动文件夹
a2.sinks.k2.hdfs.round = true
#多少时间单位创建一个新的文件夹
a2.sinks.k2.hdfs.roundValue = 1
#重新定义时间单位
a2.sinks.k2.hdfs.roundUnit = hour
#是否使用本地时间戳
a2.sinks.k2.hdfs.useLocalTimeStamp = true
#积攒多少个Event才flush到HDFS一次
a2.sinks.k2.hdfs.batchSize = 100
#设置文件类型,可支持压缩
a2.sinks.k2.hdfs.fileType = DataStream
#多久生成一个新的文件
a2.sinks.k2.hdfs.rollInterval = 30
#设置每个文件的滚动大小
a2.sinks.k2.hdfs.rollSize = 134217700
#文件的滚动与Event数量无关
a2.sinks.k2.hdfs.rollCount = 0
#最小冗余数
a2.sinks.k2.hdfs.minBlockReplicas = 1a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity = 1000a2.sources.r2.channels = c2
a2.sinks.k2.channel = c2执行监控配置
$ bin/flume-ng agent --conf conf/ --name a2 --conf-file conf/flume-hdfs.conf
复制代码

3.1 avro 服务端配置(flume-tailsource-avro-server):

a1.sources = r1
a1.sinks = k1
a1.channels = c1#source
a1.sources.r1.type = avro
a1.sources.r1.bind= Master 
a1.sources.r1.port= 55555#sink
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.kafka.topic = TestTopic
a1.sinks.k1.kafka.bootstrap.servers = Master:9092,Worker1:9092,Worker2:9092
a1.sinks.k1.kafka.flumeBatchSize = 20
a1.sinks.k1.kafka.producer.acks = 1
a1.sinks.k1.kafka.producer.linger.ms = 1#channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100#bind
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
复制代码

3.2 avro客户端配置(flume-tailsource-avro-client):

a2.sources = r2
a2.sinks = k2
a2.channels = c2a2.sources.r2.type = exec
a2.sources.r2mand = tail -f /usr/local/openresty/nginx/logs/access.log
a2.sources.r2.shell = /bin/bash -ca2.sinks.k2.type = avro
a2.sinks.k2.hostname=Master
a2.sinks.k2.port=55555a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity = 1000a2.sources.r2.channels = c2
a2.sinks.k2.channel = c2#sink配置
a1.sinks.k1.type=logger
a1.sinks.k1.channel=c1
复制代码

3.3 avro客户端配置(flume-avro-client):

a2.sources = r2
a2.sinks = k2
a2.channels = c2#source
a2.sources.r2.type = TAILDIR
a2.sources.r2.positionFile = /usr/local/soft/log_all/WAF_log/taildir_position.json
a2.sources.r2.filegroups=f1
a2.sources.r2.filegroups.f1=/usr/local/openresty/nginx/logs/access.log
a2.sources.r2.fileHeader=true#sinks
a2.sinks.k2.type = avro
a2.sinks.k2.hostname=Master
a2.sinks.k2.port=55555#channels
a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity = 1000#bind
a2.sources.r2.channels = c2
a2.sinks.k2.channel = c2
复制代码

3.4 测试

模拟客户端:
bin/flume-ng avro-client -c conf -H Master -p 55555  
-F /usr/local/apache-flume-1.6.0-cdh5.5.4-bin/testdata/testdata 真实客户端启动:
bin/flume-ng agent --conf conf --name a2 --conf-file conf/flume-avro.conf  
-Dflume.root.logger=INFO,console真实服务端启动:
bin/flume-ng agent -c conf -f conf/flume-avro-hdfs.conf  -n a2 
-Dflume.root.logger=INFO,console
复制代码

8 sqoop

sqoop-version

导入用户信息到仓库数据:

bin/sqoop import  
--connect jdbc:mysql://192.168.1.160:3306/test 
--username root  
--password 123456 
–-table  tb_customer   
--m 2
复制代码

导入用户信息到指定目录:

bin/sqoop import -
-connect jdbc:mysql://192.168.1.160:3306/test 
--username root 
--password 123456  
--target-dir /DB_warehouse/elev  
--table  tb_customer 
--m 2
复制代码

按照条件导入电梯用户信息到指定目录:

bin/sqoop import 
--connect jdbc:mysql://192.168.1.160:3306/test 
--username root 
--password inovance321 
--where "back_color!='null'" 
--target-dir /DB_warehouse/elev/test 
--table tb_customer 
--m 1
复制代码

query条件导入电梯用户信息到指定目录:

bin/sqoop import 
--connect jdbc:mysql://192.168.1.160:3306/test 
--username root 
--password inovance321
--target-dir /DB_warehouse/elev/test9 
--query 'select id, account from tb_customer WHERE address !=" " and
$CONDITIONS' 
--split-by id 
--fields-terminated-by '\t' 
--m 1
复制代码

通过以上过程,我们得知一点:$CONTITONS是linux系统的变量,在执行过程中被赋值为(1=0),虽然实际执行的这个sql很奇怪。 现在正式开始研究CONTITONS到底是什么,所以我们先查看官方文档。

If you want to import the results of a query in parallel, then each map task will need to execute a copy 
of the query, with results partitioned by bounding conditions inferred by Sqoop. Your query must include 
the token $CONDITIONS which each Sqoop process will replace with a unique condition expression. 
You must also select a splitting column with --split-by.
复制代码

如果你想通过并行的方式导入结果,每个map task需要执行sql查询语句的副本,结果会根据sqoop推测的边界条件分区。query必须包含$CONDITIONS。这样每个scoop程序都会被替换为一个独立的条件。同时你必须指定--split-by.分区

For example:
$ sqoop import \--query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' \--split-by a.id --target-dir /user/foo/joinresults
复制代码

9 Zookeeper搭建:

1:zookeeper根目录下,进行zoo.cfg配置

initLimit ZooKeeper集群模式下包含多个zk进程,其中一个进程为leader,余下的进程为follower。 当follower最初与leader建立连接时,它们之间会传输相当多的数据,尤其是follower的数据落后leader很多。initLimit配置follower与leader之间建立连接后进行同步的最长时间。
syncLimit 配置follower和leader之间发送消息,请求和应答的最大时间长度。
tickTime tickTime则是上述两个超时配置的基本单位,例如对于initLimit,其配置值为5,说明其超时时间为 2000ms * 5 = 10秒。
server.id=host:port1:port2 其中id为一个数字,表示zk进程的id,这个id也是dataDir目录下myid文件的内容。 host是该zk进程所在的IP地址,port1表示follower和leader交换消息所使用的端口,port2表示选举leader所使用的端口。dataDir 
其配置的含义跟单机模式下的含义类似,不同的是集群模式下还有一个myid文件。myid文件的内容只有一行,
且内容只能为1 - 255之间的数字,这个数字亦即上面介绍server.id中的id,表示zk进程的id。
复制代码

#发送心跳的间隔时间,单位:毫秒
tickTime=2000
#zookeeper保存数据的目录dataDir=/modules/zookeeper-3.4.5-cdh5.11.1/data
#日志目录
dataLogDir=/modules/zookeeper-3.4.5-cdh5.11.1/dataLog
#端口
clientPort=2181
#leader和follower初始化连接时最长能忍受多少个心跳时间的间隔数
initLimit=5
#leader和follower之间发送消息,请求和英达时间长度,最长不能超过多少个tickTime的时间长度
syncLimit=2
#zookeeper机器列表,server.order这里的Order依据集群的机器个数依次进行递增,这里的server1、server2、server3表示机器IP地址
server.1=server1:2888:3888
server.2=server2:2888:3888
server.3=server3:2888:3888
复制代码

2:在每个dataLogDir目录下,创建myid,顺序不能错

然后修改data目录的下的myid 文件中的数字,在这里即为将server2的myid内容修改为2,将server3的myid内容修改为3。
对于不同的集群,根据需要进行修改,与配置文件中的order保持一致。/zkServer.sh start
复制代码


本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。期待加入IOT时代最具战斗力的团队。QQ邮箱地址:1120746959@qq,如有任何学术交流,可随时联系。

10 Kafka搭建

1:启动kafka
nohup bin/kafka-server-start.sh config/server.properties &
2:创建主题:
bin/kafka-topics.sh --zookeeper master:2181,data1:2181,data2:2181 --topic TestTopic4 --replication-factor 1 --partitions 1 --create
3:创建生产者
bin/kafka-console-producer.sh --broker-list master:9092,data1:9092,data2:9092 --topic TestTopic4
4:创建消费者
bin/kafka-console-consumer.sh --zookeeper master:2181,data1:2181,data2:2181 --topic AdRealTimeLog --from-beginning
复制代码

11 MySQL搭建

Ubuntu上安装MySQL非常简单只需要几条命令就可以完成。

1. sudo apt-get install mysql-server
2. apt-get install mysql-client
3. sudo apt-get install libmysqlclient-dev4.安装过程中会提示设置密码什么的,注意设置了不要忘了,安装完成之后可以使用如下命令来检查是否安装成功:
sudo netstat -tap | grep mysql5.通过上述命令检查之后,如果看到有mysql 的socket处于 listen 状态则表示安装成功。
登陆mysql数据库可以通过如下命令:
mysql -u root -p6.增加允许远程访问的用户或者允许现有用户的远程访问,给root授予在任意主机(%)访问任意数据库的所有权限。SQL语句如下:
mysql> grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;7:把某个已存在的用户(例如root)修改成允许远程主机访问,则可以使用如下SQL来完成
update user set host='%' where user='root' and host='localhost';8.重启数据库
>sudo service mysql restart10:删除匿名用户
delete from user where user='';
复制代码

12 Phoenix部署

1:选择hbase对应的版本,环境变量配置
2:进入到phoenix的安装目录,找到 “phoenix-4.8.1-HBase-1.2-server.jar” ,将这个 jar 
拷贝到集群中每个节点( 主节点也要拷贝 )的 hbase 的 lib 目录下:
3:重新启动 hbase
4:启动phoenix ,进入到 phoenix 安装目录的 bin 下:sqlline.py Master,Worker1,Worker2:2181
复制代码

6:在Hbase shell中建一张表:create 'test1','cf1'put 'test1','rk0001','cf1:NAME','zhang'7:进入Phoenix  shell:create view "test1"(user_id varchar primary key,"cf1".NAME varchar);!describe "test1"select * from "test1"8: 配置Squirrel客户端
(1)将服务器上Phoenix安装目录下的phoenix-4.11.0-HBase-1.2-client.jar文件,下载到Windows下squirrel-sql安装目录的lib文件夹下,并点击squirrel-sql.bat启动。
(2)添加新的驱动(Drivers -> New Driver),如下图所示:
复制代码

(3)在弹出的“Add Driver”窗口中,设置Driver的“Name”为:Phoenix,“Phoenix”为:jdbc:phoenix:vmserver, 其中,vmserver为你Phoenix服务器的地址;“ClassName”为:org.apache.phoenix.jdbc.PhoenixDriver, 最终结果如下图:


设置完成后,点击OK关闭。 (4)点击“Drivers”边上的“Alias”选项卡,和第(2)步的新建驱动一样新建Alias (Aliases -> New Aliases),在弹出的窗口中,填写Name,UserName,Password,这三项可任意填写,在Driver选项的下拉列表中查找我们刚添加的Phoenix驱动,然后点击“Test”按钮测试连接,然后点击“Connect”按钮,弹出“Connection successful”表示配置成功。结果如下图:

点击OK按钮,关闭弹出窗口。 (5)双击新建的test Alias ,然后点击“Connect”按钮,打开SQL命令行,在“SQL”选项卡下,即可编写sql命令, 新建一张person表进行测试 create table person (id integer not null primary key,name varchar,age integer)
插入一条数据: [html] view plain copy upsert into person values (1,'zhangsan' ,18)

    查询数据:[html] view plain copyselect * from person  create 'techer11','cf1','cf2'put 'techer11','rk0001','cf1:NAME','zhang'put 'techer11','rk0001','cf1:age',12put 'techer11','rk0001','cf2:num',16put 'techer11','rk0001','cf2:sex','男'put 'techer11','rk0002','cf1:NAME','qinkaixin'put 'techer11','rk0002','cf1:age',12put 'techer11','rk0002','cf2:num',16put 'techer11','rk0002','cf2:sex','男'create view "techer11"(user_id varchar primary key,"cf1".NAME varchar,"cf1"."age" varchar,"cf2"."num" varchar,"cf2"."sex" varchar);select * from "techer"
复制代码

13 zeppelin 部署

1.部署
下载地址:
.html
本人使用的版本是
Zeppelin	0.7.3
Hbase	1.4.4
Phoenix	4.14.0-HBase-1.4
Hive	2.2.0
Presto	0.206
解压zeppelin-0.7.3-bin-all.gz 到Linux中 ,更改conf目录中的zeppelin-site.xml.template 和zeppelin-en.sh.template   分别为zeppelin-site.xml 和zeppelin-en.sh 。zeppelin.server.port 默认是8080,是Zeppelin服务器端口,注意:确保没有使用与Zeppelin Web应用程序开发端口相同的端口,zeppelin的默认端口为8080,假如有端口冲突,需要更改zeppelin-site.xml中的端口号,本人配置的是8085。
zeppelin.server.ssl.port默认是8443,Zeppelin Server ssl端口(当ssl环境/属性设置为true时使用)。
接下来配置conf目录中的zeppelin-en.sh文件,要配置JAVA_HOME(必配,zeppelin是由Java开发的),其他都的配上相应的文件路径。
复制代码

    在bin目录下执行下面语句来启动启动zeppelin,还可以停止和重启。$ zeppelin-daemon.sh start$ zeppelin-daemon.sh stop$ zeppelin-daemon.sh restart conf目录的zeppelin-site.xml中的zeppelin.anonymous.allowed默认是true,默认情况下允许匿名(anonymous)用户。如果改为false,则使用账号密码登录,将/zeppelin/conf/shiro.ini.template修改为/zeppelin/conf/shiro.ini,然后对其内容修改,如下:
复制代码

在users中配置账户名和密码,我配置了两个账户,一个是账户admin,密码admin,
一个是账户qinkaixin,密码123456。
Role1,2,3表示其充当的角色,可以在后面的WebUI中设置他们的权限。下图最后一行的 /**=authc 表示对任何url访问都需要验证。  
复制代码

在浏览器中输入localhost:8085,页面如下,在右上角进行登录。可以填写该notebook的Owners(所有者)、Readers(只读用户)、Writers(读写用户),
这样每一个notebook就可以归属于某一个具体的用户了,避免了多用户同时使用
zeppelin可能造成的冲突 ,我选择了将role1 设置为只读用户。
复制代码

1 Hbase
Zeppelin默认配置了hbase解释器,如下图所示。如果你配置了HBASE的环境变量,那么hbase
interpreter默认就会读取到你的HBASE路径。需要注意的是,要查看interpreter/hbase目录下的jar包版本,
本人使用的是Hbase1.4.4版本,而默认的是1.0版本,所以可将
Zeppelin/interpreter/hbase目录下除zeppelin-hbase-0.7.3.jar包之外的所有jar包删除,
然后将集群hbase安装路径下的lib中的所有jar包拷贝至Zeppelin/interpreter/hbase下。
复制代码

接下来创建notebook启动hbase服务,可以在默认解释器中选择hbase,则在notebook中就不需要指明解释器,也可写%hbase。2 mysqlZeppelin没有mysql的解释器,需要自己添加。在interpreters中点击create,输入你的interpreters name,并选择其group为jdbc。
复制代码

Name	               Value
default.driver	       com.mysql.jdbc.Driver
default.url	           jdbc:mysql://localhost:3306/
default.user	       mysql_user
default.password	   mysql_password添加下面的Dependencies:Artifact	                         Excludes
mysql:mysql-connector-java:5.1.46	
复制代码

3 hive
Hive与mysql一样,同样是需要自己配置解释器,采用的group也是jdbc。配置如下:Name	            Value
default.driver	    org.apache.hive.jdbc.HiveDriver
default.url	        jdbc:hive2://localhost:10000
default.user	    hive_user
default.password    hive_password添加的依赖:Artifact	                                Excludes
org.apache.hive:hive-jdbc:1.2.1	
org.apache.hadoop:hadoop-common:2.7.6	本人的hive是2.2.0版本,采用低版本的jdbc也可以运行(版本太高可能zeppelin不支持)。4 presto选择jdbc分组,配置如下,我presto的端口是9001
Name                	Value
default.driver	        com.facebook.presto.jdbc.PrestoDriver
default.url	            jdbc:presto://localhost:9001/hive/default
default.user	        user
default.password	    password添加的依赖:Artifact	                             Excludes
com.facebook.presto:presto-jdbc:0.170	
org.apache.hive:hive-jdbc:1.2.1	
org.apache.hadoop:hadoop-common:2.7.6	本人的presto是0.206版本,亲测使用0.206的jdbc运行不了,而0.170的可以完美运行。5 phoenix同上,选择jdbc分组,配置如下Name	            Value
default.driver	    org.apache.phoenix.jdbc.PhoenixDriver
default.url	        jdbc:phoenix:localhost:2181
default.user	    user
default.password	password添加的依赖:Artifact	                                        Excludes
org.apache.phoenix:phoenix-core:4.14.0-HBase-1.4	
复制代码

14 SupetSet部署

CentOS下安装python3:
1.下载Python3&emsp;&emsp; .6.1/Python-3.6.1.tgz
2.安装python3&emsp;&emsp;我个人习惯安装在/usr/local/python3(具体安装位置看个人喜好)&emsp;&emsp;创建目录:mkdir -p /usr/local/python3&emsp;&emsp;解压下载好的Python-3.x.x.tgz包(具体包名因你下载的Python具体版本不不同⽽而不不同,如:我下载的是Python3.6.1.那我		&emsp;这里就是Python-3.6.1.tgz)tar -zxvf Python-3.6.1.tgz
3.进入解压后的目录,编译安装。cd Python-3.6.1./configure --prefix=/usr/local/python3make && make install
4. 建立python3的软链ln -s /usr/local/python3/bin/python3 /usr/bin/python3
5.将/usr/local/python3/bin加入PATHvim ~/.bash_profile.bash_profileGet the aliases and functionsif [ -f ~/.bashrc ]; then. ~/.bashrcfiUser specific environment and startup programsPATH=$PATH:$HOME/bin:/usr/local/python3/binexport PATH改完记得执行行下面的命令, 让上一步的修改生效:source ~/.bash_profile
6 最后检查Python3及pip3是否正常可用:python3 -VPython 3.6.1pip3 -Vpip 9.0.1 from /usr/local/python3/lib/python3.6/site-packages (python 3.6)
7.不行的话在创建一下pip3的软链接ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3后面所有的执行需使用pip3替代pip!先对pip3进行升级pip3 install --upgrade setuptools pip然后安装和启动supersetInstall supersetpip3 install superset创建admin账户fabmanager create-admin --app supersetInitialize the databasesuperset db upgradeLoad some data to play withsuperset load_examplesCreate default roles and permissionssuperset initTo start a development web server on port 1000, use -p to bind to another portsuperset runserver -d如果要修改默认配置信息(例如图标和默认语言),需进入/usr/local/python3/lib/python3.6/site-packages/superset目录下对	 config.py的下面内容进行修改。------------------------------GLOBALS FOR APP Builder------------------------------Uncomment to setup Your App nameAPP_NAME = '****BI系统'Uncomment to setup an App iconAPP_ICON = '/static/assets/images/inovance.png'在以下目录中添加 inovance.png 这张logo图片/usr/local/python3/lib/python3.6/site-packages/superset/static/assets/images/
8 改用mysql元数据库superset默认采用的是sqlite轻量级数据库,性能上存在瓶颈,需要把它替换成mysql数据库。1.	准备好Mysql数据库服务创建schema:superset_db建库语句(一定要用utf8编码,否则会乱码):CREATE DATABASE superset_db CHARACTER SET utf8 COLLATE utf8_general_ci;2.	superset所在服务器还需要安装mysql相关的依赖yum install mysql-community-clientyum install mysql-devel安装Python连接mysql的依赖pip3 install mysqlclient 3.修改配置文件${superset}/config.py,把之前的注释掉。The SQLAlchemy connection string.SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(DATA_DIR, 'superset.db')SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'SQLALCHEMY_DATABASE_URI='mysql://root:password@localhost /superset_ db? charset=UTF8'   #新添语句9.使用Redis作为缓存工具本文不介绍如何安装和使用redis。在已用redis后,首先在superset所在的环境中运行pip3 install redis然后修改config.py,首先导入Redis包import redis将缓存改为redisCACHE_DEFAULT_TIMEOUT = 900 #缓存保留时间CACHE_CONFIG = {'CACHE_TYPE': 'redis','CACHE_REDIS_HOST': 'localhost',   # 配置域名'CACHE_REDIS_PORT': 6379,'CACHE_REDIS_URL': 'redis:// localhost:6379' # 配置 URL }TABLE_NAMES_CACHE_CONFIG = {'CACHE_TYPE': 'redis'}5修改查询行数打开config.py文件,搜索ROW关键字,将所有带有ROW的配置全部改为四位数,即数量级在以千为单位。数据量太大会造成superset的卡顿。ROW_LIMIT =5000VIZ_ROW_LIMIT = 100010 最后在上述三个操作全部完成后,重新对superset进行初始化设置。创建admin账户fabmanager create-admin --app supersetInitialize the databasesuperset db upgradeLoad some data to play withsuperset load_examplesCreate default roles and permissionssuperset initTo start a development web server on port 1000, use -p to bind to another portsuperset runserver -d
11 容器化RUN \cp -rf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \echo 'Asia/Shanghai' >/etc/timezoneRUN mkdir -p /usr/local/python3#PYTHON copyADD Python-3.6.1.tgz /usr/local/python3WORKDIR /root#进入解压后的目录,编译安装RUN cd /usr/local/python3/Python-3.6.1 &&\./configure --prefix=/usr/local/python3 &&\make && make install#建立python3的软链	RUN rm -rf /usr/bin/python3 &&\rm -rf /usr/bin/lsb_release &&\ln -s /usr/local/python3/bin/python3 /usr/bin/python3#环境变量ENV LANG='C.UTF-8' LANGUAGE='zh_CN.zh' LC_ALL='C.UTF-8'ENV PATH=$PATH:/usr/local/python3/binCOPY superset-entrypoint.sh /#环境生效RUN	pip3 install --upgrade setuptools pip mysqlclient && \pip3 install superset && \chmod +x /superset-entrypoint.sh#SUPERSET copyADD superset.tar.gz /usr/local/	#ENTRYPOINT ENTRYPOINT ["/superset-entrypoint.sh"]#暴露端口EXPOSE 1000#! /bin/bash#复制cp -f /usr/local/superset/config.py /usr/local/python3/lib/python3.6/site-packages/superset/#superset后台运行superset runserver -d & # 容器不退出tail -f /dev/nullFROM ubuntu:14.04   # ssh configRUN apt-get update && apt-get install -y openssh-server wget vim gcc make build-essential libssl-dev libffi-dev python3.5-dev python-pip libsasl2-dev libldap2-dev libsqlite3-dev libmysqlclient-dev && \ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' && \cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && \apt-get clean
复制代码

15 环境变量

#JAVA_HOME
export JAVA_HOME=/usr/local/soft/install/jdk1.8.0_171
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin#HADOOP_HOME
export HADOOP_HOME=/usr/local/soft/cdh_support/hadoop-2.6.0-cdh5.9.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin#SPARK_HOME
SPARK_HOME=/usr/local/soft/install/spark-2.3.0-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin#SCALA_HOME
SCALA_HOME=/usr/local/soft/install/scala-2.11.12
export PATH=$PATH:$SCALA_HOME/bin#ZOOKEEPER_HOME
ZOOKEEPER_HOME=/usr/local/soft/install/zookeeper-3.4.9
export PATH=$PATH:$ZOOKEEPER_HOME/bin#HIVE_HOME
export HIVE_HOME=/usr/local/soft/cdh_support/hive-1.1.0-cdh5.9.3
export HIVE_CONF_DIR=/usr/local/soft/cdh_support/hive-1.1.0-cdh5.9.3/conf
export PATH=$PATH:$HIVE_HOME/bin
export HADOOP_CLASSPATH=$PATH:$HADOOP_CLASSPATH:$HIVE_HOME/lib/*
export hive_dependency=/usr/local/soft/cdh_support/hive-1.1.0-cdh5.9.3/conf:/usr/local/soft/cdh_support/hive-1.1.0-cdh5.9.3/lib/*:/usr/local/soft/cdh_support/hive-1.1.0-cdh5.9.3/hcatalog/share/hcatalog/hive-hcatalog-core-2.2.0.jar
#HBASE_HOME
export HBASE_HOME=/usr/local/soft/cdh_support/hbase-1.2.0-cdh5.9.3
export HBASE_CONF_DIR=/usr/local/soft/cdh_support/hbase-1.2.0-cdh5.9.3/conf
export PATH=$PATH:$HBASE_HOME/bin#KYLIN
export KYLIN_HOME=/usr/local/soft/cdh_support/apache-kylin-2.5.1-bin-cdh57
export KYLIN_CONF=/usr/local/soft/cdh_support/apache-kylin-2.5.1-bin-cdh57/conf
export PATH=$PATH:$KYLIN_HOME/bin#PHOENIX
export PHOENIX_HOME=/usr/local/soft/install/apache-phoenix-4.14.0-HBase-1.4-bin
export PHOENIX_CLASSPATH=$PHOENIX_HOME
export PATH=$PATH:$PHOENIX_HOME/bin#ZEPPELIN_HOME
export ZEPPELIN_HOME=/usr/local/soft/install/zeppelin-0.7.3-bin-all
export PATH=$PATH:$ZEPPELIN_HOME/bin
复制代码

结语

秦凯新 于深圳

本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。期待加入IOT时代最具战斗力的团队。QQ邮箱地址:1120746959@qq,如有任何学术交流,可随时联系。

更多推荐

Kylin OLAP 综合解决方案环境部署及双引擎切换实践

本文发布于:2024-02-14 13:59:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1763514.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:解决方案   环境   引擎   Kylin   OLAP

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!