問題タブ [hadoop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - (Linux)Hadoopクラスターのセットアップ
Hadoopクラスターをセットアップするために、最初にLinuxクラスターをセットアップする必要がありますか?
sorting - レデューサーに送信される前に値を並べ替える
システムのこつをつかむために、hadoop で小さなテスト アプリケーションを構築することを考えています。
私が念頭に置いているアプリケーションは、統計を行う領域になります。レデューサー関数から「各キーの10個の最悪の値」が必要です(一部のキーの値が膨大になる可能性を想定する必要があります)。
私が計画したのは、レデューサーに入る値は基本的に「実際の値」と「実際の値の品質/関連性」の組み合わせになるということです。関連性に基づいて、私は「単純に」10個の最悪/最良の値を取り、それらをレデューサーから出力したいと考えています。
どうすればそれを行うことができますか (特定のキーに膨大な数の値があると仮定して)? レデューサーに送信される前にすべての値を並べ替える方法はありますか (最初の 10 個を読み取ったときに入力の読み取りを停止するだけです)、またはこれを別の方法で行う必要がありますか?
ここで誰かが私が見ることができるサンプルコードを教えてもらえますか?
更新: 2 つの興味深いJira 課題 HADOOP-485およびHADOOP-686を見つけました。
Hadoop 0.20 API でこれを使用する方法に関するコード フラグメントを持っている人はいますか?
orm - 参加のない生活...理解と一般的な慣行
多くの「BAW」(big ass-websites)は、インデックス付きの巨大なテーブルに依存するデータストレージおよび取得技術を使用しており、クエリでJOINを使用しない/使用できないクエリ(BigTable、HQLなど)を使用しています。スケーラビリティとシャーディングデータベースを処理します。非常に関連性の高いデータがたくさんある場合、それはどのように機能しますか?
この結合の多くはアプリケーション側で行わなければならないと推測することしかできませんが、それは高価になり始めませんか?コンパイルする情報を取得するために、いくつかの異なるテーブルに対していくつかのクエリを実行する必要がある場合はどうなりますか?そもそも結合を使用するよりも、データベースに何度もアクセスする方がコストがかかり始めていませんか?どれだけのデータがあるかによると思いますか?
また、一般的に利用可能なORMの場合、結合を使用できないことにどのように対処する傾向がありますか?今日頻繁に使用されているORMでこれをサポートしていますか?または、このレベルのデータにアプローチする必要があるほとんどのプロジェクトは、とにかく独自にロールする傾向がありますか?
したがって、これは私が行っている現在のプロジェクトには当てはまりませんが、「ベストプラクティス」とは何かについてしか推測できないようになったため、数か月前から頭に浮かびました。必要な規模に達したことがないため、どのプロジェクトでもこれに対処する必要はありませんでした。うまくいけば、この質問は他の人にも役立つでしょう。
誰かが以下に言ったように、ORMは参加なしでは「機能しません」。このレベルのデータを扱う開発者がすでに利用できる他のデータアクセスレイヤーはありますか?
編集: いくつかの明確化のために、VinkoVrsalovicは言った:
「スニッカーは、トランザクションデータが非正規化されてHadoop、BigTable、またはCassandraスキームで使用されるNO-SQLについて話したいと思っています。」
これは確かに私が話していることです。
xkcdリファレンスをキャッチした人のためのボーナスポイント。
hadoop - Hadoop へのデータの書き込み
Windows ボックスなどの外部ソースから Hadoop (HDFS) にデータを書き込む必要があります。現在、データを namenode にコピーし、HDFS の put コマンドを使用してクラスターに取り込みます。コードを閲覧したところ、これを行うための API が見つかりませんでした。私が間違っていること、HDFS に対して外部クライアントをコーディングする簡単な方法があることを誰かが教えてくれることを願っています。
java - Hadoopはシミュレーションを実行するのに適していますか?
はJavaで確率シミュレーションを作成しました。これは、ディスク上のいくつかのCSVファイル(合計約100MB)からデータをロードし、結果を別の出力ファイル(多くのデータではなく、ブール値といくつかの数値)に書き込みます。パラメータファイルもあり、さまざまなパラメータについて、シミュレーション出力の分布が変化すると予想されます。正しい/最適な入力パラメーターを決定するには、複数の入力パラメーター構成にわたって複数のシミュレーションを実行し、各グループの出力の分布を確認する必要があります。各シミュレーションは、パラメーターとランダム性に応じて0.1〜10分かかります。
私はHadoopについて読んでいて、それが多くのシミュレーションの実行に役立つかどうか疑問に思っています。近い将来、約8台のネットワーク化されたデスクトップマシンにアクセスできるようになるかもしれません。私が正しく理解していれば、map関数がシミュレーションを実行して結果を吐き出す可能性があり、レデューサーがIDである可能性があります。
私が心配しているのはHDFSです。これは、小さなCSVファイルの断片ではなく、巨大なファイルを対象としているようです(64MBの最小推奨ブロックサイズを構成するのに十分な大きさではありません)。さらに、各シミュレーションには、各CSVファイルの同一のコピーのみが必要です。
Hadoopは私にとって間違ったツールですか?
hadoop - Hadoop を予備の CPU サイクルに制限できますか?
予備の CPU サイクルのみを使用するように Hadoop を実行することは可能ですか? つまり、Hadoop を人々の仕事用マシンにインストールして、PC を使用していないときに数値処理を実行できるようにすることは実現可能であり、明らかなパフォーマンスの低下を経験することはありません (ファンを脇に追いやる!)。
おそらく、JVM を低い優先度で実行し、「多すぎる」ネットワークを使用しないように設定する場合にすぎません (Windows マシンでそのようなことが可能であると仮定します)。
そうでない場合、BOINCのようなものに相当する Java を知っている人はいますか?
編集: サイクル スカベンジング インフラストラクチャのリストが見つかりました。Hadoop に関する私の質問はまだ残っていますが。
python - ダンボシーケンスファイル入力をタブ区切りテキストに変換する方法
入力があります。これは、単一のプリミティブ、またはプリミティブのリストまたはタプルである可能性があります。
次のように、リストにまとめたいと思います。
通常の場合はフラットになります(tastringではない)
しかし、values = '1234'の場合、['1'、 '2'、 '3'、 '4']を取得しますが、['1234']が必要です。
そして、values = 1の場合、TypeErrorが発生します。'int'オブジェクトは反復可能ではありませんが、[1]が必要です。
これを行うためのエレガントな方法はありますか?最後に本当にやりたいのは'\t'.join(flatten(values))
編集:これをもっとよく説明させてください...
ダンボを使用して、Hadoopバイナリシーケンスファイルをフラットタブで区切られたテキストファイルに変換したいと思います。出力フォーマットオプションを使用して、-outputformat text
Dumboは、HadoopストリーミングのPythonラッパーです。要するに、私はマッパー関数を書く必要があります:
def mapper(key、values)#いくつかのことを行うyield k、v
ここで、kはキーの最初の部分からの文字列であり、valueは、キーの残りの部分と値を文字列として含むタブ区切りの文字列です。
例えば:
またはより複雑:
入力キーまたは値は、プリミティブまたはプリミティブのリスト/タプルにすることができます。何でも処理でき、値のリストを返すことができる「フラット化」関数が必要です。
out値については、次のようにしますv ='\ t'.join(list(str(s)for s in flatten(seq)))
python - Hadoop ストリーミングで個別の出力ファイルを生成する
マッパー (Python スクリプト) のみを使用し、リデューサーを使用しない場合、出力の長いファイルではなく、出力の各行に対して、ファイル名としてキーを使用して別のファイルを出力するにはどうすればよいですか?
mysql - 分散環境で実行されていない場合、HBase は意味がありますか?
データのインデックスを作成しています。これには、多くのトリプレットをフォームに格納する必要があります(document, term, weight)
。このような行を最大数百万行保存します。現在、MySQL で単純なテーブルとしてこれを行っています。ドキュメントと用語の識別子を、他のテーブルへの外部キーよりも文字列値として保存しています。ソフトウェアを書き直し、データを保存するより良い方法を探しています。
HBase の仕組みを見ると、これはかなりスキーマに適合しているように見えます。多くのトリプレットを保存する代わりにdocument
、{term => weight}
.
私は単一ノードでこれを行っているので、分散ノードなどは気にしません。MySQL が機能するのでそのまま使用する必要がありますか、それとも HBase を試すのが賢明でしょうか? Lucene がこれをフルテキスト インデックス作成に使用していることがわかります (これは、私が行っていることと似ています)。私の質問は、単一の HBase ノードが単一の MySQL ノードとどのように比較されるかということです。私は Scala から来ているので、直接の Java API は、JDBC や MySQL の各クエリの解析などよりも優れているのでしょうか?
私の主な関心事は、以前はボトルネックだった挿入速度です。処理後、ライブ クエリのためにデータを MySQL に戻すことになるでしょう。
両方のプロトタイプを作成してみますが、コミュニティがこれに関する貴重な洞察を提供してくれると確信しています。
hadoop - これはHBaseの適切な(または可能な)使用法ですか?
HBaseを、{document => {term => weight}}
「用語Xを重みZでドキュメントYに挿入する」などの形式の数百万のエントリをプッシュできるストアとして使用し、「このドキュメントの上位1000の用語を選択する」または「各ドキュメントの上位1000の用語を選択してください。」これは私の現在のMySQL実装で機能しますが、おそらくドメインはHBaseに適しています。HBaseとBigTableは、同様の問題ドメインであるフルテキストインデックス作成に使用されていることに注意してください。
私はHBaseで数ページしか読んでいないことがわかりますが、私の質問の要点を理解していただければ幸いです。この質問に関連しています。
考えられる障壁には、HBaseがLIMIT
句と同等のクエリを許可しないことが含まれる場合があります。重みでクエリを実行したい場合は、を関連付けたいと思います{weight => term}
。これは、同じ重みを持つ2つの用語で問題が発生します(HBaseでは一意のキーのみが許可されると想定しています)。または、特定の重みの用語のコレクションを保存する必要がありますが、これにより、返される用語の数を正確に制限する能力が制限されます。