アイデアを使用してsparkプログラムをリモートでデバッグし、Winの下でhadoopのhbaseを読み取ります
環境:
Win7
Jdk1.8
Hadoop2.7.3winutils.exeツール
IntelliJIDEA 2017.3 x64
IDEA
2017.3scalaサポートパッケージ
Spark2.1.1Scala2.11.4
ステップ0システム環境変数を設定します
0.1 Jdk1.8、Scala2.11.4構成は問題ありませんが、詳細には触れません。0.2winでの
Hadoop構成:(ここでは2.7.3)
クラスター内のhadoop2.7.3インストールパスをコピーし、任意のルートディレクトリに配置します。 winの下のドライブ文字
winutils.exeツールリンクのhadoop2.7.3をダウンロードします。https://pan.baidu.com/s/1pKWAGe3パスワード:zyi7
は、元のhadoopbinディレクトリを
システム環境変数に構成されたbinhadoop2.7.3に置き換えます。 、hadoop2。7.3/ binは装備できません
最初のステップはアイデアを構成することです
1.1ダウンロードとインストール(https://www.jetbrains.com/idea/)
最初のインストールが開始されなかった後、クラック
クラックを待ちます(経済状況が可能であれば、結局のところ、このような優れたツールをサポートしてみてください)
ダウンロードクラックパッケージ:リンク:https://pan.baidu.com/s/1eRSjwJ4パスワード:mo6d
インストールディレクトリのbinディレクトリに直接コピーされたクラックパケット
1.2構成アイデア環境
ダウンロードIDEA 2017.3のサポートパッケージscala
アドレス:リンク:HTTPS:// PAN .baidu.com / s / 1mixLiPUパスワード:dbzu
install IDEA 2017.3 scalaサポートパッケージ(必須)
開発の第2ステップ
2.1プロジェクトを作成する(mavenプロジェクト、開発が簡単、javaとscalaの両方をサポートするプロジェクトを作成する)
maven-archetype-quickstartolve / 70 / gravity / SouthEast)
グループIDのコンテンツを無視して開始し、スナップショットを削除してくださいバージョン
2.2のpom.xmlファイルを変更し、使用するフレームワークを
追加します。以下を追加します。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<scala.version>2.11.4</scala.version>
<hbase.version>1.2.5</hbase.version>
<spark.version>2.1.1</spark.version>
<hadoop.version>2.7.3</hadoop.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<!-- spark -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<!-- hadoop -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>${hadoop.version}</version>
</dependency>
<!-- hbase -->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>${hbase.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>${hbase.version}</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<maniClass></maniClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.1</version>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>java</executable>
<includeProjectDependencies>false</includeProjectDependencies>
<classpathScope>compile</classpathScope>
<mainClass>com.dt.spark.SparkApps.App</mainClass>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
2.3クラスター構成ファイルをプロジェクト
のhadoopに追加し、構成ファイルをhbaseresourcesフォルダーにコピーします
3番目のステップは、コードを記述してケースを実現することです。
ケース1:Javaを使用してワードカウントケースを実装する
words.txtをhdfsに配置してwords.txt
の内容を表示した後に編集した機器テストファイル
赤いボックスはwords.txtです。各単語の分割の間にスペースを使用して、確認できます。
JavaWordCountコードは次のとおりです。
package com.shanshu.demo;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.sql.SparkSession;
import scala.Tuple2;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Pattern;
public class JavaWordCount {
private static final Pattern SPACE = Pattern.compile(" ");
public static void main(String[] args) throws Exception {
/*if (args.length < 1) {
System.err.println("Usage: JavaWordCount <file>");
System.exit(1);
}*/
System.setProperty("hadoop.home.dir","E:\\hadoop-2.7.3");
SparkSession spark = SparkSession
.builder().master("spark://192.168.10.84:7077")
.appName("JavaWordCount")
.getOrCreate();
spark.sparkContext()
.addJar("E:\\myIDEA\\sparkDemo\\out\\artifacts\\sparkDemo_jar\\sparkDemo.jar");
JavaRDD<String> lines = spark.read().textFile("hdfs://192.168.10.82:8020/user/jzz/word/words.txt").javaRDD();
JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterator<String> call(String s) {
return Arrays.asList(SPACE.split(s)).iterator();
}
});
JavaPairRDD<String, Integer> ones = words.mapToPair(
new PairFunction<String, String, Integer>() {
@Override
public Tuple2<String, Integer> call(String s) {
return new Tuple2<String, Integer>(s, 1);
}
});
JavaPairRDD<String, Integer> counts = ones.reduceByKey(
new Function2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer i1, Integer i2) {
return i1 + i2;
}
});
List<Tuple2<String, Integer>> output = counts.collect();
for (Tuple2<?,?> tuple : output) {
System.out.println(tuple._1() + ": " + tuple._2());
}
spark.stop();
}
}
注意:コードで@Overrideが使用されている場合は、Javaバージョンを変更する必要があります。そうしないと、エラーが報告されます。
プロジェクトのJavaバージョンを変更します
モジュールのJavaバージョンを変更します
説明:コードはローカルで実行され、jarに追加されて、
次のようにコードステップjarパッケージが作成されます。
パスを追加します
注:実行するには、生成されたjarをクラスターにコピーする必要がある場合があります。コンパイルされたjarが大きくなりすぎないようにするには、これらのjarを削除します。
iiコンパイル
iiiコンパイルされた結果
ivjarパッケージのディレクトリをディスクにコピーします
このパスを次のようにコードに書き込みます(実行する必要があります。そうしないと、ローカルで実行できません)
。
vコードを実行すると、成功後に次のような結果が表示されます。
ケース2:scalaコードを使用してhbaseのデータを読み取ります
準備作業:hbaseにテーブルフルーツを作成し、列ファミリーは情報であり、データ(ビルド済み)を挿入して
表示します。
ihbaseの構成ファイルをアイデアのresourcesディレクトリにコピーします
ii Scalajarを追加する
iiiメインディレクトリにscalaフォルダーを作成し、scalaをソースに設定します
ivディレクトリjavaディレクトリのMETA-INFディレクトリをscalaにコピーし、MANIFEST.MFファイルを削除して、パッケージを作成します。
vScalaコードを書く
コードは次のように表示されます。
package com.shanshu.scala
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.hbase.util.Bytes
import org.apache.spark.{SparkConf, SparkContext}
object ReadHbase {
def main(args: Array[String]): Unit = {
val conf = HBaseConfiguration.create()
conf.set("hbase_zookeeper_property_clientPort","2181")
conf.set("hbase_zookeeper_quorum","192.168.10.82")
val sparkConf = new SparkConf().setMaster("local[3]").setAppName("readHbase")
val sc = new SparkContext(sparkConf)
//设置查询的表名
conf.set(TableInputFormat.INPUT_TABLE, "fruit")
val stuRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat],
classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
classOf[org.apache.hadoop.hbase.client.Result])
//遍历输出
stuRDD.foreach({ case (_,result) =>
val key = Bytes.toString(result.getRow)
val name = Bytes.toString(result.getValue("info".getBytes,"name".getBytes))
val color = Bytes.toString(result.getValue("info".getBytes,"color".getBytes))
val num = Bytes.toString(result.getValue("info".getBytes,"num".getBytes))
val people = Bytes.toString(result.getValue("info".getBytes,"people".getBytes))
println("Row key:"+key+" Name:"+name+" color:"+color+" num:"+num+" people"+people)
})
sc.stop()
}
}
vi同様に、jarパッケージを開き(不要、クラスターで実行する場合にのみ必要)
、元のjarを削除します。今回はscalaのメインクラスを選択する必要があるためです。
vii操作の結果は次のとおりです。
QQ:28169942401(広告を邪魔しないでください)