弹性 MapReduce Phoenix JDBC 使用

在本地 shell 下进入你想要新建工程的目录,例如 D://mavenWorkplace 中,输入如下命令新建一个 Maven 工程mvn archetype:generate -DgroupId=$yourgroupID -DartifactId=$yourartifactID -DarchetypeArtifactId=maven-archetype-quickstart。

相关产品
弹性 MapReduce 产品页,含版本规格、价格与购买入口。

一、新建 Maven 工程

其中 $yourgroupID 即为你的包名。$yourartifactID 为你的项目名称,而 maven-archetype-quickstart 表示创建一个 Maven Java 项目。工程创建过程中需要下载一些文件,请保持网络通畅。

创建成功后,在 D://mavenWorkplace 目录下就会生成一个名为 $yourartifactID 的工程文件夹。其中的文件结构如下所示:

simple —pom.xml 核心配置,项目根下 —src —main —java Java 源码目录 —resources Java 配置文件目录 —test —java 测试源码目录 —resources 测试配置目录

其中我们主要关心 pom.xml 文件和 main 下的 Java 文件夹。pom.xml 文件主要用于依赖和打包配置,Java 文件夹下放置你的源代码。

二、添加phoenix依赖

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <phoenix.version>5.1.2</phoenix.version></properties><dependency> <groupId>org.apache.phoenix</groupId> <artifactId>phoenix-hbase-compat-2.3.0</artifactId> <version>${phoenix.version}</version> </dependency> <dependency> <groupId>org.apache.phoenix</groupId> <artifactId>phoenix-core</artifactId> <version>${phoenix.version}</version> </dependency><build><plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>utf-8</encoding> </configuration> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin></plugins></build>

其中,phoenix.version 与集群中 phoenix 版本保持一致。

三、创建 JDBC 连接对象

package Phoenix;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;public class PhoenixJdbc { static { try { Class.forName("org.apache.phoenix.jdbc.PhoenixDriver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static void main(String[] args) { String createSql = "create table if not exists user_tb(id VARCHAR,uname VARCHAR CONSTRAINT pk PRIMARY KEY (id))"; Connection connection = null; try { String ipList = "${zk_ip1},${zk_ip2},${zk_ip3}:2181"; String znodeParent = "${znodeParent}"; String url = "jdbc:phoenix:" + ipList + ":" +znodeParent; connection = DriverManager.getConnection(url); Statement statement = connection.createStatement(); statement.executeUpdate(createSql); statement.executeUpdate("upsert into user_tb values ('1','张三')"); statement.executeUpdate("upsert into user_tb values ('2','李四')"); connection.commit(); } catch (SQLException throwables) { throwables.printStackTrace(); } }}

其中 ${zk_ip1} , ${zk_ip2} , ${zk_ip3} 为 Zookeeper 节点内网 ip,2181 为 Zookeeper 默认监听端口;${znodeParent} 为 hbase 中 hbase-site.xml 配置文件里 zookeeper.znode.parent 参数的值。

四、编译代码并打包上传

如果你的 Maven 配置正确并且成功的导入了依赖包,那么整个工程应该没有错误可以直接编译。在本地命令行模式下进入工程目录,执行下面的命令对整个工程进行打包:

mvn package

上传到EMR集群的 HBase 节点,在本地命令行模式下运行:

scp $localfile root@公网IP地址:$remotefolder

其中,$localfile 是你的本地文件的路径加名称;root 为 CVM 服务器用户名;公网 IP 可以在 EMR 控制台的节点信息中或者在云服务器控制台查看;$remotefolder 是你想存放文件的 CVM 服务器路径。上传完成后,在 EMR 命令行中即可查看对应文件夹下是否有相应文件。

五、运行样例

首先需要登录 EMR 集群中的 HBase 组件节点,建议登录到 Master 节点。登录 EMR 的方式请参考 登录 Linux 实例。这里我们可以选择使用 WebShell 登录。单击对应云服务器右侧的登录,进入登录界面,用户名默认为 root,密码为创建 EMR 时用户自己输入的密码。输入正确后,即可进入命令行界面。

在 EMR 命令行先使用以下指令切换到 hadoop 用户:

su hadoop

然后进入你存放 jar 包的文件夹下,执行以下指令:

java -cp $jar包名 $类全限定名

其中 $jar包名为先前上传的 EMR 节点的包名,$类全限定名为 java main 方法的全限定名 package.mainclass。

赞 (0)
上一篇 4天前
下一篇 4天前