Spark of BigData:Sparkコンピューティングエンジンの紹介、ダウンロード、古典的なケースの詳細な戦略
コンテンツ
Sparkの紹介
Apache Sparkは、大規模なデータ処理用に設計された高速で一般的なコンピューティングエンジンです。Sparkは、UC Berkeley AMPラボ(カリフォルニア大学バークレー校のAMPラボ)によってオープンソース化されたHadoop MapReduceに似た一般的な並列フレームワークです。Sparkには、Hadoop MapReduceの利点がありますが、MapReduceとは異なり、Jobの中間出力結果はしたがって、Sparkは、データマイニングやマシン学習などの反復を必要とするMapReduceアルゴリズムに適しています。
SparkはHadoopに似たオープンソースのクラスターコンピューティング環境ですが、Sparkを特定のワークロードに優れたものにするいくつかの違いがあります。つまり、Sparkはインタラクティブなクエリを提供できるだけでなく、反復ワークロードを最適化することもできます。 。
Sparkは、アプリケーションフレームワークとしてScalaを使用するScala言語で実装されています。Hadoopとは異なり、SparkとScalaは緊密に統合されており、Scalaは分散データセットをネイティブコレクションオブジェクトと同じくらい簡単に操作できます。
Sparkは分散データセットでの反復ジョブをサポートするために作成されましたが、実際にはHadoopを補完するものであり、Hadoopファイルシステムで並行して実行できます。この動作は、Mesosと呼ばれるサードパーティのクラスタリングフレームワークによってサポートされています。Sparkは、カリフォルニア大学バークレー校のAMPラボ(アルゴリズム、マシン、およびピープルラボ)によって開発され、大規模で低遅延のデータ分析アプリケーションを構築しました。
1.Sparkの3つの主要な機能
- Sparkアプリケーション開発者は、アプリケーションが実行する必要のある計算に集中できます。高レベルAPIは、クラスター自体の懸念を取り除き、Sparkアプリケーション開発者は、アプリケーションが実行する必要のある計算自体に集中できます。
- Sparkの高速化:Sparkは高速で、インタラクティブコンピューティングと複雑なアルゴリズムをサポートします。インメモリコンピューティングでは、SparkはHadoopよりも100倍高速です。バッチおよびストリーミングデータの高性能は、最先端のDAGスケジューラ、クエリオプティマイザ、および物理実行エンジンを使用して実現されます。
- Sparkは使いやすい:Java、Scala、Python、R、およびSQLでアプリケーションをすばやく作成します。Sparkは80以上の高度なオペレーターを提供します。これは、SQLクエリ、テキスト処理、機械学習などのさまざまな操作を完了するために使用できる汎用エンジンです。Sparkが登場する前に、通常、これらの要件にそれぞれ対処するためのさまざまなエンジンを学習する必要があります。
Sparkのダウンロード
ダウンロードアドレス:ダウンロード| Apache Spark
Sparkの古典的なケース
1、単語数
text_file = sc.textFile("hdfs://...")
counts = text_file.flatMap(lambda line: line.split(" ")) \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a + b)
counts.saveAsTextFile("hdfs://...")
2、円周率推定
def inside(p):
x, y = random.random(), random.random()
return x*x + y*y < 1
count = sc.parallelize(xrange(0, NUM_SAMPLES)) \
.filter(inside).count()
print "Pi is roughly %f" % (4.0 * count / NUM_SAMPLES)
3、テキスト検索
textFile = sc.textFile("hdfs://...")
# Creates a DataFrame having a single column named "line"
df = textFile.map(lambda r: Row(r)).toDF(["line"])
errors = df.filter(col("line").like("%ERROR%"))
# Counts all the errors
errors.count()
# Counts errors mentioning MySQL
errors.filter(col("line").like("%MySQL%")).count()
# Fetches the MySQL errors as an array of strings
errors.filter(col("line").like("%MySQL%")).collect()
4、ロジスティック回帰による予測
# Every record of this DataFrame contains the label and
# features represented by a vector.
df = sqlContext.createDataFrame(data, ["label", "features"])
# Set parameters for the algorithm.
# Here, we limit the number of iterations to 10.
lr = LogisticRegression(maxIter=10)
# Fit the model to the data.
model = lr.fit(df)
# Given a dataset, predict each point's label, and show the results.
model.transform(df).show()