有奖捉虫:行业应用 & 管理与支持文档专题 HOT

新建 Maven 工程

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