在上一章《環境搭建》基礎上,本章對各個模塊做個測試
Mysql 測試
1、Mysql節點准備
為方便測試,在mysql節點中,增加點數據
進入主節點
docker exec -it hadoop-maste /bin/bash
進入數據庫節點
ssh hadoop-mysql
創建數據庫
create database zeppelin_test;
創建數據表
create table user_info(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(16),age INT);
增加幾條數據,主鍵讓其自增:
insert into user_info(name,age) values("aaa",10);
insert into user_info(name,age) values("bbb",20);
insert into user_info(name,age) values("ccc",30);
2、Zeppelin配置
配置驅動及URL地址:
default.driver ====> com.mysql.jdbc.Driver
default.url ====> jdbc:mysql://hadoop-mysql:3306/zeppelin_test
使zeppelin導入mysql-connector-java庫(maven倉庫中獲取)
mysql:mysql-connector-java:8.0.12
3、測試mysql查詢
%jdbc
select * from user_info;
應能打印出先前插入的幾條數據。
Hive測試
本次使用JDBC測試連接Hive,注意上一節中,hive-site.xml的一個關鍵配置,若要使用JDBC連接(即TCP模式),hive.server2.transport.mode應設置為binary。
1、Zeppelin配置
(1)增加hive解釋器,在JDBC模式修改如下配置
default.driver ====> org.apache.hive.jdbc.HiveDriver
default.url ====> jdbc:hive2://hadoop-hive:10000
(2)添加依賴
org.apache.hive:hive-jdbc:0.14.0
org.apache.hadoop:hadoop-common:2.6.0
2、測試
Zeppelin增加一個note
增加一個DB:
%hive
CREATE SCHEMA user_hive
%hive
use user_hive
創建一張表:
%hive
create table if not exists user_hive.employee(id int ,name string ,age int)
插入數據:
%hive
insert into user_hive.employee(id,name,age) values(1,"aaa",10)
再打印一下:
%hive
select * from user_hive.employee
所有的操作,都是OK的。
另外,可以從mydql中的hive.DBS表中,查看到剛剛創建的數據庫的元信息:
%jdbc
select * frmo hive.DBS;
如下:

上圖顯示了剛剛創建的DB的元數據。
登錄Hadoop管理后台,應也能看到該文件信息(容器環境將Hadoop的50070端口映射為宿主機的51070)
http://localhost:51070/explorer.html#/home/hive/warehouse/user_hive.db
可以看到,user_hive.db/employee下,有剛剛創建的數據文件,如下:

分布式測試
在上一節基礎上,進入主從節點,可以看到,在相同的目錄下,都存在有相同的數據內容,可見上一節對於hive的操作,在主從節點是都是生效的。操作如下:
主節點:
root@hadoop-maste:~# hdfs dfs -ls /home/hive/warehouse/user_hive.db/employee
Found 1 items
-rwxr-xr-x 2 gpadmin supergroup 9 2018-08-15 11:36 /home/hive/warehouse/user_hive.db/employee/000000_0
從節點:
root@hadoop-node1:~# hdfs dfs -ls /home/hive/warehouse/user_hive.db/employee
Found 1 items
-rwxr-xr-x 2 gpadmin supergroup 9 2018-08-15 11:36 /home/hive/warehouse/user_hive.db/employee/000000_0
測試 Spark 操作 hive
通過spark向剛才創建的user_hive.db中寫入兩條數據,如下:
import org.apache.spark.sql.{SQLContext, Row}
import org.apache.spark.sql.types.{StringType, IntegerType, StructField, StructType}
import org.apache.spark.sql.hive.HiveContext
//import hiveContext.implicits._
val hiveCtx = new HiveContext(sc)
val employeeRDD = sc.parallelize(Array("6 rc 26","7 gh 27")).map(_.split(" "))
val schema = StructType(List(StructField("id", IntegerType, true),StructField("name", StringType, true),StructField("age", IntegerType, true)))
val rowRDD = employeeRDD.map(p => Row(p(0).toInt, p(1).trim, p(2).toInt))
val employeeDataFrame = hiveCtx.createDataFrame(rowRDD, schema)
employeeDataFrame.registerTempTable("tempTable")
hiveCtx.sql("insert into user_hive.employee select * from tempTable")
運行之后,查一下hive
%hive
select * from employee
可以看到,數據已經寫進文件中了

