大数据:Spark直连Oracle数据库(五)

前面我们已经把大数据平台搭建完成了,接下来是怎么应用大数据这件威力巨大的武器了。因为作者目前在一家传统型制造企业,很多业务和数据都是基于传统关系型数据库展开的,数据源大部分都存在Oracle、Mysql、PostgreSQL等传统关系型数据库,所以如何跟大数据平台建立联系,或者说让大数据技术更接地气,是应用大数据技术最好的实践。本文从一个初学者的角度去实践Spark访问Oracle数据库的过程。

1.创建测试数据

CREATE TABLE EMP
(
   EMPNO      NUMBER,
   ENAME      VARCHAR (10),
   JOB        VARCHAR (9),
   MGR        NUMBER,
   SAL        NUMBER,
   COMM       NUMBER,
   DEPTNO     NUMBER
);
INSERT INTO EMP VALUES
(7369, 'SMITH', 'CLERK', 7902, 800, 50, 20);
INSERT INTO EMP VALUES
(7499, 'ALLEN', 'SALESMAN', 7698, 1600, 300, 30);
INSERT INTO EMP VALUES
(7521, 'WARD', 'SALESMAN', 7698, 1250, 500, 30);
INSERT INTO EMP VALUES
(7566, 'JONES', 'MANAGER', 7839, 2975, NULL, 20);
INSERT INTO EMP VALUES
(7654, 'MARTIN', 'SALESMAN', 7698, 1250, 1400, 30);
INSERT INTO EMP VALUES
(7698, 'BLAKE', 'MANAGER', 7839, 2850, NULL, 30);
INSERT INTO EMP VALUES
(7782, 'CLARK', 'MANAGER', 7839, 2450, NULL, 10);
INSERT INTO EMP VALUES
(7788, 'SCOTT', 'ANALYST', 7566, 3000, NULL, 20);
INSERT INTO EMP VALUES
(7839, 'KING', 'PRESIDENT', NULL, 5000, NULL, 10);
INSERT INTO EMP VALUES
(7844, 'TURNER', 'SALESMAN', 7698, 1500, 0, 30);
INSERT INTO EMP VALUES
(7876, 'ADAMS', 'CLERK', 7788, 1100, NULL, 20);
INSERT INTO EMP VALUES
(7900, 'JAMES', 'CLERK', 7698, 950, NULL, 30);
INSERT INTO EMP VALUES
(7902, 'FORD', 'ANALYST', 7566, 3000, NULL, 20);
INSERT INTO EMP VALUES
(7934, 'MILLER', 'CLERK', 7782, 1300, NULL, 10);
CREATE TABLE DEPT
(
   DEPTNO   NUMBER,
   DNAME    VARCHAR (14),
   LOC      VARCHAR (13)
);
INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS');
INSERT INTO DEPT VALUES (30, 'SALES', 'CHICAGO');
INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');
COMMIT;

2.启动集群

基于前面搭建好的大数据平台,调用启动集群脚本start-cluster.sh,启动完成后登陆http://master:50070 和http://master:8080网页访问Hadoop和Spark,验证集群有没有启动成功。

3.Spark直连Oracle

3.1. 集群成功启动后,进入Shell,因为笔者采用的是python脚本,所以通过pyspark命令来实现数据库操作任务,在spark集群上启动pyspark命令如下:

./bin/pyspark --jars “/home/spark/jars/ojdbc6.jar” --master spark://master:7077,worker1:7077,worker2:7077 --num-executors 1 --driver-memory 1g --executor-memory 1g
启动成功的页面如下:
大数据:Spark直连Oracle数据库(五)_第1张图片

3.2. 启动成功后,需要跟Oracle建立连接,我们都知道要跟数据库连接常用的有ODBC、JDBC,我们这里采用的是JDBC,要通过JDBC连接Oracle数据库就需要下载Oracle提供的驱动程序,根据本地Java版本Oracle官网上有下载,作者调用的Oracle数据库版本是11g,本地安装的Java是1.8版本的,所下载的JDBC驱动程序是Oracle Database 11g Release 2 (11.2.0.4) JDBC Drive
通过SQL语句查询Oracle数据库版本和查询Java版本的方式如下:
大数据:Spark直连Oracle数据库(五)_第2张图片在这里插入图片描述
下载完jdbc驱动后得到的是一个ojdbc6.jar文件,为了方便管理,一定要把这个jar包放在${SPARK_HOME}/jars目录下,这个目录是存放跟spark交互相关的jar包的。
3.3. 通过pyspark交互平台查询数据库表结构和表里面的数据。

empDF = spark.read \
    .format("jdbc") \
    .option("url", "jdbc:oracle:thin:username/password@//hostname:portnumber/SID") \
    .option("dbtable", "hr.emp") \
    .option("user", "db_user_name") \
    .option("password", "password") \
    .option("driver", "oracle.jdbc.driver.OracleDriver") \
    .load()
    empDF.printSchema()
    empDF.show()

大数据:Spark直连Oracle数据库(五)_第3张图片
执行查询命令,

query = "(select empno,ename,dname from emp, dept where emp.deptno = dept.deptno) emp"
empDF = spark.read \
    .format("jdbc") \
    .option("url", "jdbc:oracle:thin:username/password@//hostname:portnumber/SID") \
    .option("dbtable", query) \
    .option("user", "db_user_name") \
    .option("password", "password") \
    .option("driver", "oracle.jdbc.driver.OracleDriver") \
    .load()
empDF.printSchema()
empDF.show()

大数据:Spark直连Oracle数据库(五)_第4张图片
至此,Spark直连Oracle数据库完成。

你可能感兴趣的:(大数据,大数据)