Update(Stage5):Kudu_javaApi使用_Spark整合
Table of Contents:
- 2.3. 安装 Zookeeper
- 2.4. 安装 Hadoop
- 2.4. 安装 MySQL
- 2.5. 安装 Hive
- 2.6. 安装 Kudu
- 2.7. 安装 Impala
- 2.8. 安装 Hue
- 2.8. 使用 Scala 操作 Kudu
- 2.9. 使用 Spark 操作 Kudu
- 2.10. 使用 Impala 执行 SQL 语句访问 Hive
2.3. 安装 Zookeeper
主机名 | 是否有 Zookeeper |
---|---|
|
有 |
|
有 |
|
有 |
Step 1
: 安装Zookeeper
-
和以往不同,
CDH
版本的Zookeeper
是经过定制的, 所以可以直接通过Yum
来安装, 使用刚才所搭建的Yum
仓库, 在所有节点上执行如下命令yum install -y zookeeper zookeeper-server
CDH
版本的所有工具都会遵循Linux
的习惯放置Log
和Data
, 所以需要先创建Zookeeper
的数据目录, 并且所有者指定给Zookeeper
所使用的用户, 如下命令在所有节点执行mkdir -p /var/lib/zookeeper
chown -R zookeeper /var/lib/zookeeper/
Step 2
: 配置Zookeeper
-
在使用
Apache
版本的Zookeeper
时, 我们需要自己创建Myid
文件, 现在使用CDH
版本的Zookeeper
已经为我们提供了对应的Shell
程序, 在所有节点执行如下命令, 注意myid
参数, 在不同节点要修改myid
service zookeeper-server init --myid=1
Zookeeper
想要组成集群的话, 必须要修改配置文件, 配置整个集群的服务器地址,CDH
版本的Zookeeper
默认配置文件在/etc/zookeeper/conf/zoo.cfg
, 修改这个文件增加服务器地址, 在所有节点上修改Zookeeper
的配置文件增加如下server.1=cdh01:2888:3888
server.2=cdh02:2888:3888
server.3=cdh03:2888:3888
Step 3
: 在所有节点启动Zookeeper
并检查-
启动
CDH
版本的Zookeeper
也是通过Service
的方式service zookeeper-server start
因为 Zookeeper 的搭建比较复杂, 启动完成后可以通过 CDH 提供的命令, 或者使用 Zookeeper 的四字命令来查看是否状态正常
zookeeper-server status
echo mntr | nc cdh01 2181 //查看cdh01上的zookeeper的状态统计,可以在cdh01,cdh02或cdh03上执行该命令
echo stat | nc cdh03 2181
CDH 版本的组件有一个特点, 默认情况下配置文件在 /etc 对应目录, 日志在 /var/log 对应目录, 数据在 /var/lib 对应目录, 例如说 Zookeeper , 配置文件放在 /etc/zookeeper 中, 日志在 /var/log/zookeeper 中, 其它的组件也遵循这样的规律 |
2.4. 安装 Hadoop
安装软件包
配置 HDFS
配置 Yarn 和 MapReduce
主机名 | 职责 |
---|---|
|
|
|
|
|
|
Step 1
: 安装Hadoop
软件包-
CDH
版本的Hadoop
安装主要思路如下下载软件包
配置各个组件
启动各个组件
所以第一步, 应该先安装
Hadoop
的软件包, 只有软件包已经下载, 才能进行相应组件的配置, 根据集群规划进行安装根据集群规划, cdh01 中应该如下安装软件包
yum -y install hadoop hadoop-yarn-resourcemanager hadoop-yarn-nodemanager hadoop-hdfs-secondarynamenode hadoop-hdfs-namenode hadoop-hdfs-datanode hadoop-mapreduce hadoop-mapreduce-historyserver hadoop-client
根据集群规划, cdh02 和 cdh03 中应该如下安装软件包
yum -y install hadoop hadoop-yarn-nodemanager hadoop-hdfs-datanode hadoop-mapreduce hadoop-client
Step 2
: 配置HDFS
-
配置文件的思路
在
CDH
版本的组件中, 配置文件是可以动态变更的本质上,
CDH
各组件的配置文件几乎都分布在/etc
目录中, 例如Hadoop
的配置文件就在/etc/hadoop/conf
中, 这个conf
目录是Hadoop
当前所使用的配置文件目录, 但是这个目录其实是一个软链接, 当希望更改配置的时候, 只需要在/etc/hadoop
中创建一个新的目录, 然后将conf
指向这个新目录即可但是因为各个组件的
conf
目录对应了多个目录, 还需要修改其指向, 管理起来很麻烦, 所以CDH
使用了Linux
一个非常厉害的功能, 可以配置一个目录可以指向的多个目录, 同时可以根据优先级确定某个目录指向谁, 这个工具叫做alternatives
, 有如下几个常见操作alternatives --install
讲一个新目录关联进来, 并指定其 ID 和优先级alternatives --set
设置其指向哪个目录alternatives --display
展示其指向哪个目录
在所有节点中复制原始配置文件并生成新的配置目录, 让
Hadoop
使用使用新的配置目录这样做的目的是尽可能的保留原始配置文件, 以便日后恢复, 所以在所有节点中执行如下操作
创建新的配置目录
cp -r /etc/hadoop/conf.empty /etc/hadoop/conf.itcast
链接过去, 让
Hadoop
读取新的目录# 关联新的目录和 conf
alternatives --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.itcast 50
# 设置指向
alternatives --set hadoop-conf /etc/hadoop/conf.itcast
# 显式当前指向
alternatives --display hadoop-conf
在所有节点的新配置目录
/etc/hadoop/conf.itcast
中, 修改配置文件vi /etc/hadoop/conf.itcast/core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://cdh01:8020</value>
</property>vi /etc/hadoop/conf.itcast/hdfs-site.xml
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///var/lib/hadoop-hdfs/cache/hdfs/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///var/lib/hadoop-hdfs/cache/hdfs/dfs/data</value>
</property>
<property>
<name>dfs.permissions.superusergroup</name>
<value>hadoop</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>cdh01:50070</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
在所有节点中, 创建配置文件指定的
HDFS
的NameNode
和DataNode
存放数据的目录, 并处理权限如下创建所需要的目录
mkdir -p /var/lib/hadoop-hdfs/cache/hdfs/dfs/name
mkdir -p /var/lib/hadoop-hdfs/cache/hdfs/dfs/data因为
CDH
比较特殊, 其严格按照Linux
用户来管理和启动各个服务, 所以HDFS
启动的时候使用的是hdfs
用户组下的用户hdfs
, 需要创建文件后进行权限配置chown -R hdfs:hdfs /var/lib/hadoop-hdfs/cache/hdfs/dfs/name
chown -R hdfs:hdfs /var/lib/hadoop-hdfs/cache/hdfs/dfs/data
chmod 700 /var/lib/hadoop-hdfs/cache/hdfs/dfs/name
chmod 700 /var/lib/hadoop-hdfs/cache/hdfs/dfs/data
格式化
NameNode
, 当然, 这个命令只能在cdh01
上执行, 只能执行一次sudo -u hdfs hdfs namenode -format
启动
HDFS
cdh01
上和HDFS
有关的服务有NameNode
,SecondaryNameNode
, 使用如下命令启动这两个组件service hadoop-hdfs-namenode start
service hadoop-hdfs-secondarynamenode start在
cdh02
和cdh03
上执行如下命令service hadoop-hdfs-datanode start
Step 3
: 配置Yarn
和MapReduce
-
前面已经完成配置目录创建等一系列任务了, 所以在配置
Yarn
的时候, 只需要去配置以下配置文件即可在所有节点上, 配置
Yarn
和MapReduce
修改
Yarn
和MapReduce
配置文件vi /etc/hadoop/conf.itcast/mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>cdh01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>cdh01:19888</value>
</property>
<property>
<name>hadoop.proxyuser.mapred.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.mapred.hosts</name>
<value>*</value>
</property>
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/user</value>
</property>vi /etc/hadoop/conf.itcast/yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>cdh01</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>
$HADOOP_CONF_DIR,
$HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,
$HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
$HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,
$HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/*
</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>file:///var/lib/hadoop-yarn/cache/${user.name}/nm-local-dir</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>file:///var/log/hadoop-yarn/containers</value>
</property>
<property>
<name>yarn.log.aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>hdfs:///var/log/hadoop-yarn/apps</value>
</property>
在所有节点上, 创建配置文件指定的存放数据的目录
创建
Yarn
所需要的数据目录mkdir -p /var/lib/hadoop-yarn/cache
mkdir -p /var/log/hadoop-yarn/containers
mkdir -p /var/log/hadoop-yarn/apps赋予
Yarn
用户这些目录的权限chown -R yarn:yarn /var/lib/hadoop-yarn/cache /var/log/hadoop-yarn/containers /var/log/hadoop-yarn/apps
为
MapReduce
准备HDFS
上的目录, 因为是操作HDFS
, 只需要在一个节点执行即可大致上是需要两种文件夹, 一种用做于缓存, 一种是用户目录
为
MapReduce
缓存目录赋权sudo -u hdfs hadoop fs -mkdir /tmp
sudo -u hdfs hadoop fs -chmod -R 1777 /tmp
sudo -u hdfs hadoop fs -mkdir -p /user/history
sudo -u hdfs hadoop fs -chmod -R 1777 /user/history
sudo -u hdfs hadoop fs -chown mapred:hadoop /user/history为
MapReduce
创建用户目录sudo -u hdfs hadoop fs -mkdir /user/$USER
sudo -u hdfs hadoop fs -chown $USER /user/$USER
启动
Yarn
在
cdh01
上启动ResourceManager
和HistoryServer
service hadoop-yarn-resourcemanager start
service hadoop-mapreduce-historyserver start在
cdh02
和cdh03
上启动NodeManager
service hadoop-yarn-nodemanager start
2.4. 安装 MySQL
安装 MySQL
有很多方式, 可以直接准备压缩包上传解压安装, 也可以通过 Yum
来安装, 从方便和是否主流两个角度来看, 通过 Yum
来安装会比较舒服, MySQL
默认是单机的, 所以在一个主机上安装即可, 我们选择在 cdh01
上安装, 安装大致就是两个步骤
安装
配置
Step 1
: 安装-
因为要从
Yum
安装, 但是默认的Yum
源是没有MySQL
的, 需要导入Oracle
的源, 然后再安装下载
Yum
源配置wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
rpm -ivh mysql-community-release-el6-5.noarch.rpm安装 MySQL
yum install -y mysql-server
Step 2
: 启动和配置-
现在
MySQL
的安全等级默认很高, 所以要通过一些特殊的方式来进行密码设置, 在启动MySQL
以后要单独的进行配置启动
MySQL
service mysqld start
通过
MySQL
提供的工具, 设置root
密码mysql_secure_installation
2.5. 安装 Hive
因为 Hive
需要使用 MySQL
作为元数据库, 所以需要在 MySQL
为 Hive
创建用户, 创建对应的表
安装
Hive
软件包在
MySQL
中增加Hive
用户配置
Hive
初始化
Hive
在MySQL
中的表结构启动
Hive
因为我们并不需要 Hive
的 HA
, 所以在单机部署 Hive
即可
Step 1
: 安装Hive
软件包-
安装
Hive
依然使用CDH
的Yum
仓库
yum install -y hive hive-metastore hive-server2
如果想要
Hive
使用MySQL
作为元数据库, 那需要给Hive
一个MySQL
的JDBC
包yum install -y mysql-connector-java
ln -s /usr/share/java/mysql-connector-java.jar /usr/lib/hive/lib/mysql-connector-java.jar
Step 2
:MySQL
中增加Hive
用户-
进入
MySQL
mysql -u root -p
为
Hive
创建数据库CREATE DATABASE metastore;
USE metastore;创建
Hive
用户CREATE USER 'hive'@'%' IDENTIFIED BY 'hive';
为
Hive
用户赋权REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'hive'@'%';
GRANT ALL PRIVILEGES ON metastore.* TO 'hive'@'%';
FLUSH PRIVILEGES;
Step 3
: 配置Hive
-
在启动
Hive
之前, 要配置Hive
一些参数, 例如使用MySQL
作为数据库之类的配置Hive
的配置文件在/etc/hive/conf/hive-site.xml
, 修改它为如下内容<!-- /usr/lib/hive/conf/hive-site.xml -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://cdh01/metastore</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
</property>
<property>
<name>datanucleus.autoCreateSchema</name>
<value>false</value>
</property>
<property>
<name>datanucleus.fixedDatastore</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoStartMechanism</name>
<value>SchemaTable</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://cdh01:9083</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>true</value>
</property>
<property>
<name>hive.support.concurrency</name>
<description>Enable Hive's Table Lock Manager Service</description>
<value>true</value>
</property>
<property>
<name>hive.support.concurrency</name>
<value>true</value>
</property>
<property>
<name>hive.zookeeper.quorum</name>
<value>cdh01</value>
</property> Step 4
: 初始化表结构-
使用
Hive
之前,MySQL
中还没有任何内容, 所以需要先为Hive
初始化数据库, 创建必备的表和模式.Hive
提供了方便的工具, 提供MySQL
的连接信息, 即可帮助我们创建对应的表/usr/lib/hive/bin/schematool -dbType mysql -initSchema -passWord hive -userName hive -url jdbc:mysql://cdh01/metastore
Step 5
: 启动Hive
-
默认版本的
Hive
只提供了一个Shell
命令, 通过这一个单独的Shell
命令以指定参数的形式启动服务, 但是CDH
版本将Hive
抽取为两个独立服务, 方便通过服务的形式启动Hive
,hive-metastore
是元数据库,hive-server2
是对外提供连接的服务service hive-metastore start
service hive-server2 start通过
beeline
可以连接Hive
验证是否启动成功, 启动beeline
后, 通过如下字符串连接Hive
!connect jdbc:hive2://cdh01:10000 username password org.apache.hive.jdbc.HiveDriver
2.6. 安装 Kudu
安装 Kudu
依然使用我们已经配置好的 Yum
仓库来进行, 整体步骤非常简单, 但是安装上分为 Master
和 Tablet server
安装 Master server
安装软件包
配置
启动
安装 Tablet server
安装软件包
配置
启动
节点 | 职责 |
---|---|
|
|
|
|
|
|
Step 1
: 安装Master server
的软件包-
根据集群规划, 尽量让
cdh01
少一些负载, 所以只在cdh01
上安装Master server
, 命令如下yum install -y kudu kudu-master kudu-client0 kudu-client-devel
Step 2
: 配置Master server
-
Kudu
的Master server
没有太多可以配置的项目, 默认的话日志和数据都会写入到/var
目录下, 只需要修改一下BlockManager
的方式即可, 在虚拟机上使用Log
方式可能会带来一些问题, 改为File
方式:vim /etc/kudu/conf/master.gflagfile
光标到最后一行,在最后面添加上: --block_manager=file
但是有一点需要注意, 一定确保
ntp
服务是开启的, 可以使用ntpstat
来查看, 因为Kudu
对时间同步的要求非常高,ntp
必须可以自动同步# 查看时间是否是同步状态
ntpstat Step 3
: 运行Master server
-
运行
Master server
service kudu-master start
查看
Web ui
确认Master server
已经启动http://cdh01:8051/
Step 4
: 安装Tablet server
的软件包-
根据集群规划, 在
cdh02
,cdh03
中安装Tablet server
, 负责更为繁重的工作yum install -y kudu kudu-tserver kudu-client0 kudu-client-devel
Step 5
: 配置Tablet server
-
Master server
相对来说没什么需要配置的, 也无须知道各个Tablet server
的位置, 但是对于Tablet server
来说, 必须配置Master server
的位置, 因为一般都是从向主注册自己在
cdh02
,cdh03
修改/etc/kudu/conf/tserver.gflagfile
为如下内容, 如果有多个Master server
实例, 用逗号分隔地址即可--tserver_master_addrs=cdh01:7051
同时
Tablet server
也需要设置BlockManager
--block_manager=file
Step 6
: 运行Tablet server
-
启动
service kudu-tserver start
通过
Web ui
查看是否已经启动成功http://cdh02:8050/
注意:
# kudu-master's RPC port is 7051, its http port is 8051
# kudu-tserver's RPC port is 7050, its http port is 8050
2.7. 安装 Impala
Kudu
没有 SQL
解析引擎, 因为 Cloudera
准备使用 Impala
作为 Kudu
的 SQL
引擎, 所以既然使用 Kudu
了, Impala
几乎也是必不可少的, 安装 Impala
之前, 先了解以下 Impala
中有哪些服务
服务 | 作用 |
---|---|
|
|
|
|
|
|
所以, cdh01
上应该有 Catalog
和 StateStore
, 而不应该有 ImpalaServer
, 因为 cdh01
中没有 DataNode
安装
cdh01
中的软件包安装其它节点中所需的软件包
对所有节点进行配置
启动
节点 | 职责 |
---|---|
|
|
|
|
|
|
Step 1
: 安装软件包-
安装主节点
cdh01
所需要的软件包yum install -y impala impala-state-store impala-catalog impala-shell
安装其它节点所需要的软件包
yum install -y impala impala-server
Step 2
: 针对所有节点进行配置-
软链接
Impala
所需要的Hadoop
配置文件, 和Hive
的配置文件Impala
需要访问Hive
的MetaStore
, 所以需要hive-site.xml
来读取其位置Impala
需要访问HDFS
, 所以需要读取hdfs-site.xml
来获取访问信息, 同时也需要读取core-site.xml
获取一些信息ln -s /etc/hadoop/conf/core-site.xml /etc/impala/conf/core-site.xml
ln -s /etc/hadoop/conf/hdfs-site.xml /etc/impala/conf/hdfs-site.xml
ln -s /etc/hive/conf/hive-site.xml /etc/impala/conf/hive-site.xml配置
Impala
的主服务位置, 以供ImpalaServer(Impalad)
访问, 修改Impala
的默认配置文件/etc/default/impala
, 3个节点都要修改:(/etc/default/目录下,
往往放置CDH
版本中各组件的默认的配置文件)IMPALA_CATALOG_SERVICE_HOST=cdh01
IMPALA_STATE_STORE_HOST=cdh01
另外,指定kudu_master节点的位置(也可以以后执行时在参数中手动指定,不过一般在这边指定好了先),在IMPALA_SERVER_ARGS后面添加--kudu_master_hosts=cdh01:7051:IMPALA_SERVER_ARGS=" \
-log_dir=${IMPALA_LOG_DIR} \
-catalog_service_host=${IMPALA_CATALOG_SERVICE_HOST} \
-state_store_port=${IMPALA_STATE_STORE_PORT} \
-use_statestore \
-state_store_host=${IMPALA_STATE_STORE_HOST} \
-be_port=${IMPALA_BACKEND_PORT}
--kudu_master_hosts=cdh01:7051"
Step 3
: 启动-
启动 cdh01
service impala-state-store start
service impala-catalog start 注意:启动时可能会报错:原因:/etc/hosts的配置问题。
解决方法:
vim /etc/hosts (记得,只需要修改cdh01的hosts)
可以将红框中的配置的主机名去掉,也可以将第一行移动到最后一行。此次,我是将红框中的主机名配置去掉了。
启动其它节点
service impala-server start
通过 Web ui 查看是否启动成功
http://cdh01:25000
2.8. 安装 Hue
Hue
其实就是一个可视化平台, 主要用于浏览 HDFS
的文件, 编写和执行 Hive
的 SQL
, 以及 Impala
的 SQL
, 查看数据库中数据等, 而且 Hue
一般就作为 CDH
数据平台的入口, 所以装了 CDH
而不装 Hue
会觉得少了点什么, 面试的时候偶尔也会问 Hue
的使用, 所以我们简单安装, 简单使用 Hue
让大家了解以下这个可视化工具
Hue
组件安装配置
Hue
启动
Hue
Hue
只在 cdh01
上安装即可
Step 1
:Hue
组件安装-
使用
Yum
即可简单安装yum -y install hue
Step 2
: 配置Hue
-
Hue
的配置就会稍微优点复杂, 因为Hue
要整合其它的一些工具, 例如访问HDFS
, 所以配置要从两方面说, 一是HDFS
要允许Hue
访问, 二是配置给Hue
如何访问HDFS
(以及如何访问其它程序)配置
HDFS
, 允许Hue
的访问修改
hdfs-site.xml
增加如下内容, 以便让Hue
用户可以访问HDFS
中的文件<property>
<name>hadoop.proxyuser.hue.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hue.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.httpfs.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.httpfs.groups</name>
<value>*</value>
</property>配置
Hue
, 告诉Hue
如何访问其它组件和工具配置
Hue
所占用的Web
端口, 在/etc/hue/conf/hue.ini
中搜索http_port
修改为如下http_host=cdh01
http_port=8888配置
Impala
的访问方式, 在/etc/hue/conf/hue.ini
中搜索server_host
修改为如下server_host=cdh01
配置
Hive
的访问方式, 在/etc/hue/conf/hue.ini
中搜索hive_server_host
修改为如下hive_server_host=cdh01
Step 3
: 启动Hue
-
使用如下命令即可启动
service hue start
进入web界面: 输入网址: http://cdh01:8888/ 默认初始凭据: admin/admin 小结:
服务 | 命令 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CDH版本的特点:
2.8. 使用 Scala 操作 Kudu
Kudu API
结构导入
Kudu
所需要的包创建表
插入数据
查询数据
Kudu API
的结构设计-
对象 设计 Client
- 创建
-
使用
Kudu master
服务器地址列表来创建 - 作用
-
Kudu
的API
主入口, 通过Client
对象获取Table
后才能操作数据 - 操作
-
检查表是否存在
提交表的
DDL
操作, 如create
,delete
,alter
, 在对表进行DDL
的时候, 需要如下两个对象Kudu Schema
定义表的列结构Kudu Partial Row
指定分区方式
创建
Table
对象
Table
- 创建
-
通过
Client
对象开启 - 作用
-
通过
Table
对象可以操作表中的数据 - 操作
-
insert
,delete
,update
,upsert
行扫描行
Scanner
- 创建
-
通过
Table
对象开启扫描 - 作用
-
扫描表数据, 并获取结果
- 操作
-
Kudu
中可以通过读取模式空值该读到哪些数据, 有如下三种读取模式READ_LATEST
是Scanner
的默认模式, 只会返回已经提交的数据, 类似ACID
中的ReadCommitted
READ_AT_SNAPSHOT
读取某一个时间点的数据, 这个模式效率相对比较低, 因为会等待这个时间点之前的所有事务都提交后, 才会返回响应的数据, 类似ACID
中的RepeatableRead
READ_YOUR_WRITES
这种模式会确保读取到自己已经写入的数据, 并且尽可能的忽略其他人的写入, 会导致读取期间有其它人写入但是没有等待, 所以产生的问题就是每次读取的数据可能是不同的, 当前还是实验性功能, 尽量不要使用
- 导入
Kudu
所需要的包 -
Kudu
并没有提供Scala
单独的客户端SDK
, 但是提供了Java
的SDK
, 我们使用Scala
访问Kudu
的时候, 可以使用Java
的API
, 可以创建一个新的工程开始Kudu Scala
的学习, 创建工程的方式参照Spark
部分第一天, 创建工程后, 需要先做如下两件事- 需要导入如下三个
Maven
插件 -
maven-compile-plugin
Maven
的编译插件其实是自动导入的, 现在需要导入这个插件的目的主要是需要通过其指定JDK
的版本maven-shade-plugin
一般工程打包的方式有两种
uber Jar
直译过来就是胖
Jar
, 其中包含了所有依赖的Jar
包, 通常会重命名其中一些类以避免冲突,non-uber Jar
瘦
Jar
, 没有包含依赖的Jar
包, 在运行的时候使用环境中已有的库
scala-maven-plugin
引入这个插件的主要作用是编译
Scala
代码
举个栗子, 比如说现在在本地引入了 Spark
的依赖, 要提交代码去集群运行, 但是集群中必然包含了Spark
相关的所有依赖, 那么此时是否需要再生成Uber Jar
了呢? 明显不需要, 因为Spark
在安装部署集群的时候,Spark
的软件包内, 有一个lib
目录, 其中所有的Jar
包在运行的时候都会被加载, 完全不需要Uber Jar
再举个栗子, 比如说现在依然是引入 Spark
的依赖, 但是同时引入了一个JSON
解析的包, 但是这个JSON
解析的包在集群中并没有, 那么此时如何解决? 有两种方式, 一种是Non-Uber Jar
, 但是将依赖的Jar
包在使用spark-submit
命令提交任务的时候通过-jar
参数一并提交过去. 另外一种是直接生成Uber Jar
包含这个JSON
解析库 - 需要导入一个
Kudu
的依赖包 -
根据使用 Hadoop 的版本不同, Kudu 的导入方式有两种, 一种是 CDH 版本的依赖, 一种是 Apache 版本的依赖, 我们当前使用 CDH 版本的依赖, 所以需要导入如下包
<dependency>
<groupId>org.apache.kudu</groupId>
<artifactId>kudu-client</artifactId>
<version>1.7.0-cdh5.16.1</version>
<scope>provided</scope>
</dependency> - 整个
Maven
文件,详见代码 -
- 需要导入如下三个
- 创建表(详见代码)
-
在进行如下操作之前, 需要先创建
Scala
的类, 通过Junit
的方式编写代码, 当然, 也可以创建Object
, 编写Main
方法来运行创建
KuduClient
实例创建表的列模式
Schema
创建表
- 插入数据
-
详见代码
- 扫描查询数据
-
详见代码。
2.9. 使用 Spark 操作 Kudu
2.10. 使用 Impala 执行 SQL 语句访问 Hive
Update(Stage5):Kudu_javaApi使用_Spark整合的更多相关文章
- Update(Stage5):Kudu入门_项目介绍_ CDH搭建
Kudu 导读 什么是 Kudu 操作 Kudu 如何设计 Kudu 的表 Table of Contents 1. 什么是 Kudu 1.1. Kudu 的应用场景 1.2. Kudu 和其它存储工 ...
- Update(Stage5):DMP项目_业务介绍_框架搭建
DMP (Data Management Platform) 导读 整个课程的内容大致分为如下两个部分 业务介绍 技术实现 对于业务介绍, 比较困难的是理解广告交易过程中各个参与者是干什么的 对于技术 ...
- JAVAEE——spring03:spring整合JDBC和aop事务
一.spring整合JDBC 1.spring提供了很多模板整合Dao技术 2.spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术. JDBCTemplate => JDBC模 ...
- Python成长之路第二篇(3)_字典的置函数用法
字典的置函数用法(字典dict字典中的key不可以重复) class dict(object): """ dict() -> new empty dictionar ...
- java大框架
本文章,列出了一些程序员需要学习的技术和知识点,有些技术和知识点没有写道,欢迎大家进行修改和补充,有些技术公司用到,大家需要先学习,有些技术和知识点过时,大家可以了解.本人笔记连接[[http://2 ...
- SprinBoot-SpringData-整合
目录 SpringData 整合JDBC JDBCTemplate 整合Druid 配置数据源 配置Druid数据源监控 整合MyBatis 整合测试 整合Redis 测试整合 序列化配置 自定义re ...
- SpringBoot整合Mybatis注解版---update出现org.apache.ibatis.binding.BindingException: Parameter 'XXX' not found. Available parameters are [arg1, arg0, param1, param2]
SpringBoot整合Mybatis注解版---update时出现的问题 问题描述: 1.sql建表语句 DROP TABLE IF EXISTS `department`; CREATE TABL ...
- ssh整合思想 Spring与Hibernate的整合ssh整合相关JAR包下载 .MySQLDialect方言解决无法服务器启动自动update创建表问题
除之前的Spring相关包,还有structs2包外,还需要Hibernate的相关包 首先,Spring整合其他持久化层框架的JAR包 spring-orm-4.2.4.RELEASE.jar ( ...
- spring boot 整合kafka 报错 Exception thrown when sending a message with key='null' and payload=JSON to topic proccess_trading_end: TimeoutException: Failed to update metadata after 60000 ms.
org.springframework.kafka.support.LoggingProducerListener- Exception thrown when sending a message w ...
随机推荐
- C#连接SQL Server数据库(二)
执行SQL语句:Command对象 1.Command对象概述 Command对象是一个数据命令对象,主要功能是向数据库发送查询.更新.删除.修改操作的SQL语句.Command对象主要有以下几种 ...
- vue入门基础知识点测试
vue入门基础知识点测试 1.文本(值绑定){{var}}----控制<div></div>的值显示当前时间,且1秒更新一次.(可查阅 setinterval 函数,时间Dat ...
- React 实现input输入框的防抖和节流
1.为什么使用防抖和节流对于频繁触发的事件 比如keydown keyup事件 当频繁点击时候 会多次触发事件 页面出现卡顿 影响性能 2.函数防抖(debounce):间隔时间内只执行一次 函数 ...
- [lua]紫猫lua教程-命令宝典-L1-01-05. if判断结构
L1[if]01. 简单的if判断结构 没什么说得 if得基本结构如下 xxx= ) then testlib.traceprint("1-100") ) then testlib ...
- Go_ioutil包
1. ioutil包的方法 // Discard 是一个 io.Writer 接口,调用它的 Write 方法将不做任何事情 // 并且始终成功返回. var Discard io.Writer = ...
- Go_type
1. type的定义和使用 Go语言支持函数式编程,可以使用高阶编程语法.一个函数可以作为另一个函数的参数,也可以作为另一个函数的返回值,那么在定义这个高阶函数的时候,如果函数的类型比较复杂,我们可以 ...
- 前端之js基础篇
JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECM ...
- ajax传map,后端接收并解析
前端let map = new Map(); map.set(1, 1); map.set(2, 2); map.set(3, 3); //map转obj let obj= Object.create ...
- Multisim中'地'的问题
1.地其实就是一个参考电压 对于示波器而言,只用连接一个探头,另一个探头默认就是连接地.
- 1010 Radix (25分)
改了一天也没明白,第7个数据是怎么卡的 #include <bits/stdc++.h> using namespace std; const int maxn=1005; typedef ...