<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-7866290729910307340</atom:id><lastBuildDate>Fri, 01 Nov 2024 10:17:56 +0000</lastBuildDate><category>Linux</category><category>PowerShell</category><category>Windows Server 2012</category><category>Exchange 2013</category><category>Exchange Server</category><category>Windows</category><category>debian 5</category><category>ネットワーク</category><category>Exchange 2010</category><category>Hyper-V</category><category>Programming</category><category>SCO 2012</category><category>ubuntu 10.10</category><category>AWS</category><category>CentOS</category><category>Office 365</category><category>VMware</category><category>Windows 7</category><category>Windows 8</category><category>Office 2013</category><category>PHP</category><category>SQL Server</category><category>Windows Server 2012 R2</category><category>Go</category><category>KVM</category><category>Lambda</category><category>Office 2010</category><category>Tools Info</category><category>感想</category><category>Ambari</category><category>Android</category><category>DNS</category><category>FireFox</category><category>HIVE</category><category>SCVMM 2012</category><category>SharePoint Server</category><category>System Center 2012 R2</category><category>iPhone</category><category>ADCS</category><category>Active Directory</category><category>BytePlus</category><category>C</category><category>C#</category><category>Chrome</category><category>Docker</category><category>Druid</category><category>Flink</category><category>Images</category><category>Java</category><category>Jupyter</category><category>Larabel</category><category>Microsoft Azure</category><category>Mysql</category><category>Nginx</category><category>PMML</category><category>SCCM 2012</category><category>SCOM 2012 R2</category><category>SQL</category><category>Scala</category><category>Spark</category><category>Storm</category><category>System Center 2012</category><category>Vagrant</category><category>Visual Studio</category><category>Windows Server</category><category>iPad</category><category>openSUSE 11.3</category><category>エフェクト</category><category>ライブ</category><category>レコメンド</category><title>SE&#39;S BOOK</title><description></description><link>http://viewse.blogspot.com/</link><managingEditor>noreply@blogger.com (Changyao Ye)</managingEditor><generator>Blogger</generator><openSearch:totalResults>267</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-5420089268050845159</guid><pubDate>Tue, 27 Feb 2024 02:15:00 +0000</pubDate><atom:updated>2024-02-27T11:15:39.575+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">BytePlus</category><category domain="http://www.blogger.com/atom/ns#">エフェクト</category><category domain="http://www.blogger.com/atom/ns#">ライブ</category><category domain="http://www.blogger.com/atom/ns#">レコメンド</category><title>BytePlusとは</title><description>&lt;p&gt;&amp;nbsp;こんにちは、ByteDanceのtoB事業部BytePlusのセールスエンジニアリングリードの叶 長耀（ヨウ　チョウヨウ）と申します。&lt;/p&gt;&lt;p id=&quot;a7d96902-ee9c-4341-8114-c3026f1ca13e&quot; name=&quot;a7d96902-ee9c-4341-8114-c3026f1ca13e&quot;&gt;今日はBytePlusはどんなものか、どういった製品やサービスを展開しているかについて書いてみたいと思います。&lt;/p&gt;&lt;h2 id=&quot;5b200bf2-ea05-470c-8076-1ecf34cd1913&quot; name=&quot;5b200bf2-ea05-470c-8076-1ecf34cd1913&quot;&gt;BytePlusとは&lt;/h2&gt;&lt;p id=&quot;dedec73b-090a-4c98-8785-f18677442743&quot; name=&quot;dedec73b-090a-4c98-8785-f18677442743&quot;&gt;一言で言うと「&lt;strong&gt;ByteDance傘下のクラウドサービスです&lt;/strong&gt;」。AmazonのAWSみたいな感じ。ByteDanceがDouyinを始め、たくさんのtoCアプリで培ってきた技術を企業様に提供します。&lt;/p&gt;&lt;p id=&quot;220dd38c-beb9-40b8-a8b3-4af70efdea33&quot; name=&quot;220dd38c-beb9-40b8-a8b3-4af70efdea33&quot;&gt;BytePlusのHQはシンガポール、インフラはシンガポールのDCになっています。製品ラインナップはレコメンド、エフェクト、動画編集、ビデオクラウド、CDN、SMS等PaaSとSaaSがメインになっています。今後IaaSやLLM関連のサービスも提供する予定です。&lt;/p&gt;&lt;h2 id=&quot;a97b33f2-2cc8-476b-b82b-ecf93ad5f982&quot; name=&quot;a97b33f2-2cc8-476b-b82b-ecf93ad5f982&quot;&gt;BytePlusの製品一覧&lt;/h2&gt;&lt;p id=&quot;e88a59b0-be53-4559-8fb4-c339c1341171&quot; name=&quot;e88a59b0-be53-4559-8fb4-c339c1341171&quot;&gt;ウェイブサイトに全製品がリストされていますが、ここで簡単に各製品について説明します。&lt;/p&gt;&lt;h3 id=&quot;d98aff4c-c1c7-4257-826a-a782248170ea&quot; name=&quot;d98aff4c-c1c7-4257-826a-a782248170ea&quot;&gt;BytePlus レコメンド&lt;/h3&gt;&lt;figure id=&quot;a78f5774-ee2d-4856-8477-18979fb76939&quot; name=&quot;a78f5774-ee2d-4856-8477-18979fb76939&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;483&quot; src=&quot;https://assets.st-note.com/img/1708998999373-Iswd74Z8VL.png&quot; width=&quot;620&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p id=&quot;85d2bef8-b290-4061-8363-6cfc66aacd94&quot; name=&quot;85d2bef8-b290-4061-8363-6cfc66aacd94&quot;&gt;ECサイト、求人サイト、漫画、小説、ニュース、ライブ配信等コンテンツ数が多いサイト、アプリで使えるレコメンドエンジンです。特徴は3つあります。&lt;/p&gt;&lt;ol data-start=&quot;1&quot; id=&quot;6ffcf08f-1b44-496c-8e5d-29561223e0af&quot; name=&quot;6ffcf08f-1b44-496c-8e5d-29561223e0af&quot;&gt;&lt;li&gt;&lt;p id=&quot;b24e0d54-7677-4e32-ad6a-1ee3571b58eb&quot; name=&quot;b24e0d54-7677-4e32-ad6a-1ee3571b58eb&quot;&gt;&lt;strong&gt;リアルタイム性&lt;/strong&gt;（リアルタイムでモデル自体の更新ができます）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p id=&quot;f7b9abc7-ae71-4d26-aa4d-4449a72f6c7d&quot; name=&quot;f7b9abc7-ae71-4d26-aa4d-4449a72f6c7d&quot;&gt;&lt;strong&gt;コールドスタート&lt;/strong&gt;（ユーザーとアイテム両方対応）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p id=&quot;00bdacf4-8311-493d-83bd-b64873f8c202&quot; name=&quot;00bdacf4-8311-493d-83bd-b64873f8c202&quot;&gt;&lt;strong&gt;カスタマイズ性&lt;/strong&gt;（柔軟なKPI設定、データスキーマ設計、BytePlusアルゴリズムエンジニアによるモデル作成とトレーニング、KPIに合わせた成果報酬課金等お客様のビジネスニーズに合わせて柔軟に対応可能です）&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p id=&quot;50c04e62-323e-4e68-a73c-528b9fce7a22&quot; name=&quot;50c04e62-323e-4e68-a73c-528b9fce7a22&quot;&gt;使われるデータは３つあります。&lt;/p&gt;&lt;ol data-start=&quot;1&quot; id=&quot;1371da81-e988-43c1-ad3d-72e8450dccc3&quot; name=&quot;1371da81-e988-43c1-ad3d-72e8450dccc3&quot;&gt;&lt;li&gt;&lt;p id=&quot;a129c114-fab2-44ed-ae5d-932e994045a9&quot; name=&quot;a129c114-fab2-44ed-ae5d-932e994045a9&quot;&gt;ユーザーの行動（一番重要。モデルへの寄与度は約80%）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p id=&quot;ec6a5186-cad8-456c-9929-72a6bf18256b&quot; name=&quot;ec6a5186-cad8-456c-9929-72a6bf18256b&quot;&gt;コンテンツの属性データ（モデルへの寄与度は約15%)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p id=&quot;6401ece8-2d27-42ad-8202-670bff2caa3d&quot; name=&quot;6401ece8-2d27-42ad-8202-670bff2caa3d&quot;&gt;ユーザーの属性データ（個人情報に触れない属性データ。モデルへの寄与度は約5％）&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p id=&quot;ab9e64e7-9b96-45e4-ae05-9b675b0caea9&quot; name=&quot;ab9e64e7-9b96-45e4-ae05-9b675b0caea9&quot;&gt;成果報酬課金モデルを採用される場合、PoCを実施します。BytePlusからアルゴリズムエンジニア1名＋、ビッグデータエンジニア1名、データアナリスト1名、APIエンジニア1名、最小でも4人エンジニアがお客様ごとにアサインされます。&lt;/p&gt;&lt;h3 id=&quot;ddbabc5c-0c5e-4286-94f2-2048881598cd&quot; name=&quot;ddbabc5c-0c5e-4286-94f2-2048881598cd&quot;&gt;BytePlus Effects&lt;/h3&gt;&lt;p id=&quot;3955bca5-af86-4c4a-a0fa-fe2387238117&quot; name=&quot;3955bca5-af86-4c4a-a0fa-fe2387238117&quot;&gt;SNS上でよく使われるエフェクトがありますよね。美白、美顔、Face Shaping、メイクアップ、2D/3Dステッカー、AR等様々な機能を企業様に提供できます。企業のサービスに組込むことでエンタメ要素を増やし、サービス全体の成長に貢献することができます。ライブ配信や動画作成、デーティングアプリ等によく使われます。&lt;/p&gt;&lt;figure id=&quot;d0483007-0378-4098-abb6-4274c24babd6&quot; name=&quot;d0483007-0378-4098-abb6-4274c24babd6&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;499&quot; src=&quot;https://assets.st-note.com/img/1708999037317-cyfvz58fa2.png&quot; width=&quot;620&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p id=&quot;e51323b7-a5a0-4981-ad9b-2b12b5d18e88&quot; name=&quot;e51323b7-a5a0-4981-ad9b-2b12b5d18e88&quot;&gt;基本的にSDKの形で提供されます。一部API経由の呼び出しもあります。&lt;br /&gt;&lt;a href=&quot;https://creativestore.byteplus.com/mall/cv/effect&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;CreativeStore&lt;/a&gt;から確認することができます。&lt;br /&gt;&lt;br /&gt;またデモアプリもございます。以下のQRコードをスキャンしダウンロードいただけます。&lt;/p&gt;&lt;figure id=&quot;764f8d76-f300-4da7-bcfa-f7a3f27f8127&quot; name=&quot;764f8d76-f300-4da7-bcfa-f7a3f27f8127&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;297&quot; src=&quot;https://assets.st-note.com/img/1708999068880-PUJbj2KBXN.png&quot; width=&quot;620&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;d737381c-9456-4b1a-badc-016ed3048a49&quot; name=&quot;d737381c-9456-4b1a-badc-016ed3048a49&quot;&gt;BytePlus Live/MediaLive&lt;/h3&gt;&lt;p id=&quot;a6edab3e-7706-491b-855c-b4e8e8b962a5&quot; name=&quot;a6edab3e-7706-491b-855c-b4e8e8b962a5&quot;&gt;BytePlus LiveはライブストリーミングのSaaS製品です。主にライブコマース、社内大型イベント、オンライントレーニング等の用途に使われます。充実な機能、安定性、低遅延、安い等のメリットがあります。&lt;br /&gt;&lt;a href=&quot;https://assets.byteplus.com/obj/byteplus-assets/videos/live_product_highlights_3.mp4&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;https://assets.byteplus.com/obj/byteplus-assets/videos/live_product_highlights_3.mp4&lt;/a&gt;&lt;/p&gt;&lt;figure id=&quot;ca4b90fe-ea85-46a5-8cd3-28285630a1f3&quot; name=&quot;ca4b90fe-ea85-46a5-8cd3-28285630a1f3&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;302&quot; src=&quot;https://assets.st-note.com/img/1708999080720-n8VUropbkz.png&quot; width=&quot;620&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p id=&quot;0f028993-f46f-4b0b-86c1-a3f536565ae6&quot; name=&quot;0f028993-f46f-4b0b-86c1-a3f536565ae6&quot;&gt;コンソールから簡単にライブを作成、設定し、すぐにライブ配信ができます。&lt;/p&gt;&lt;figure id=&quot;e1424b43-2974-4273-8463-906aeaf35e22&quot; name=&quot;e1424b43-2974-4273-8463-906aeaf35e22&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;448&quot; src=&quot;https://assets.st-note.com/img/1708999123959-0XfF8l2p1x.png&quot; width=&quot;620&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p id=&quot;cdf587ee-532f-436b-8425-c01b286cbf47&quot; name=&quot;cdf587ee-532f-436b-8425-c01b286cbf47&quot;&gt;以下の画像はPC webページ視聴画面になります。簡単にお客様のウェブサイトに組込む（iFrameやWedSDK）ことができます。&lt;/p&gt;&lt;figure id=&quot;b74a2136-eaaf-4bfd-b5fa-60bc9cec0d2b&quot; name=&quot;b74a2136-eaaf-4bfd-b5fa-60bc9cec0d2b&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;311&quot; src=&quot;https://assets.st-note.com/img/1708999150985-SZQ6Vtatis.png&quot; width=&quot;620&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p id=&quot;d22e7717-f863-45e7-8f02-2c9101a66175&quot; name=&quot;d22e7717-f863-45e7-8f02-2c9101a66175&quot;&gt;モバイルで開く場合は、以下のような感じです。&lt;/p&gt;&lt;figure id=&quot;cd1633a3-d4b6-4cf3-8a5f-ed0cd7929ca0&quot; name=&quot;cd1633a3-d4b6-4cf3-8a5f-ed0cd7929ca0&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;632&quot; src=&quot;https://assets.st-note.com/img/1708999162661-CRPdzKZvEB.png&quot; width=&quot;313&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p id=&quot;5a150a15-e735-446e-819f-eb6a21d84297&quot; name=&quot;5a150a15-e735-446e-819f-eb6a21d84297&quot;&gt;&lt;br /&gt;ブラウザ視聴ではなく、ネイティブアプリ中でもライブ配信や視聴ができます。Live Streaming SDKとViewer SDKが提供され、アプリ内に実装いただけます。&lt;/p&gt;&lt;p id=&quot;09cd9c30-de54-4467-b238-0b84864f9055&quot; name=&quot;09cd9c30-de54-4467-b238-0b84864f9055&quot;&gt;BytePlus MediaLiveはPaaSサービスになります。自由度がLiveより高く、様々なカスタマイズができます。&lt;br /&gt;動画ライブ配信によく使われます。&lt;/p&gt;&lt;h3 id=&quot;679e65fa-254b-49cb-b6cc-8dd19e9dbf91&quot; name=&quot;679e65fa-254b-49cb-b6cc-8dd19e9dbf91&quot;&gt;BytePlus VoD&lt;/h3&gt;&lt;p id=&quot;0ce48df5-6e49-4fcf-a62d-ddcc526e44e8&quot; name=&quot;0ce48df5-6e49-4fcf-a62d-ddcc526e44e8&quot;&gt;ビデオオンデマンド、エンドツーエンドの動画（ショート動画、ロング動画）サービスです(PaaS)。&lt;br /&gt;&lt;br /&gt;以下の図は、メディアのアップロード、管理と処理（トランスコーディング等）、配信、再生など、BytePlus VODが提供するコア機能を示しています。&lt;/p&gt;&lt;figure id=&quot;6ed5801d-4658-42dd-8e7a-63851c2e1564&quot; name=&quot;6ed5801d-4658-42dd-8e7a-63851c2e1564&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;291&quot; src=&quot;https://assets.st-note.com/img/1708999180728-Rk1l0qMCer.png&quot; width=&quot;620&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p id=&quot;df8b34c9-4197-4e70-8db4-98cbc282bce4&quot; name=&quot;df8b34c9-4197-4e70-8db4-98cbc282bce4&quot;&gt;大規模なサービス上で実証されている低遅延、高品質、安定性の高いVoDサービス。&lt;br /&gt;BytePlus VoD Playerをご利用いただけます。クラッシュ率0.001%以下、端末側で超解像によって画質を強化、ファーストフレーム表示が速いというメリットがあります。&lt;/p&gt;&lt;p id=&quot;6e03cee2-08cb-47f3-a111-4349caa98cb3&quot; name=&quot;6e03cee2-08cb-47f3-a111-4349caa98cb3&quot;&gt;ぜひ以下の動画を確認してみてください。違いがわかるかと思います。&lt;br /&gt;&lt;a href=&quot;https://assets.byteplus.com/obj/byteplus-assets/videos/vod_product_highlight_1.mp4&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;https://assets.byteplus.com/obj/byteplus-assets/videos/vod_product_highlight_1.mp4&lt;/a&gt;&lt;/p&gt;&lt;h3 id=&quot;3bf219ef-10cd-4267-9d18-bbf873cd033c&quot; name=&quot;3bf219ef-10cd-4267-9d18-bbf873cd033c&quot;&gt;BytePlus RTC&lt;/h3&gt;&lt;p id=&quot;357018cc-625a-4600-b119-0d307e388745&quot; name=&quot;357018cc-625a-4600-b119-0d307e388745&quot;&gt;Zoom等で使われるリアルタイムコミュニケーション技術です。ByteDanceの&lt;a href=&quot;https://www.larksuite.com/ja_jp&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;Lark&lt;/a&gt;(Zoom, Slack, Google Workspace,メール等の合体)というツールでも使われています。&lt;br /&gt;BytePlus RTCは高品質のリアルタイムオーディオとビデオのPaaSサービスです。&lt;/p&gt;&lt;figure id=&quot;34c6433c-8b4d-4552-b561-f45fe858070f&quot; name=&quot;34c6433c-8b4d-4552-b561-f45fe858070f&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;286&quot; src=&quot;https://assets.st-note.com/img/1708999211926-mdL4Etx6je.png&quot; width=&quot;620&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p id=&quot;02a33335-01bd-41e4-8cd5-b0717d7764c0&quot; name=&quot;02a33335-01bd-41e4-8cd5-b0717d7764c0&quot;&gt;BytePlus RTCは他のサービス（VoD、Effect、MediaLive)と容易に連携できます。&lt;/p&gt;&lt;figure id=&quot;b5809531-3ffd-4429-a2b1-91792d065c14&quot; name=&quot;b5809531-3ffd-4429-a2b1-91792d065c14&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;302&quot; src=&quot;https://assets.st-note.com/img/1708999223416-xxwUyQEnv3.png&quot; width=&quot;620&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p id=&quot;1259a0b4-8b9e-4f47-ae7e-e28cb33dbd88&quot; name=&quot;1259a0b4-8b9e-4f47-ae7e-e28cb33dbd88&quot;&gt;デモアプリはこちら&lt;br /&gt;Web版：&lt;a href=&quot;https://demo.byteplus.com/rtc/solution/videocall/login&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;https://demo.byteplus.com/rtc/solution/videocall/login&lt;/a&gt;&lt;/p&gt;&lt;figure id=&quot;23897047-eab5-43c5-9c9a-27b441d0b81f&quot; name=&quot;23897047-eab5-43c5-9c9a-27b441d0b81f&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;239&quot; src=&quot;https://assets.st-note.com/img/1708999512461-o6x0ID5Qpd.png&quot; width=&quot;384&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;3bdda138-31b8-4440-bdd9-bd54f5fdced6&quot; name=&quot;3bdda138-31b8-4440-bdd9-bd54f5fdced6&quot;&gt;BytePlus Video Editor&lt;/h3&gt;&lt;p id=&quot;a6796148-267a-4d98-ba77-5b0f63939cd9&quot; name=&quot;a6796148-267a-4d98-ba77-5b0f63939cd9&quot;&gt;BytePlus Video Editorは、ByteDanceのアプリ（抖音、CapCut、西瓜ビデオ、FaceU、Ulikeなど）で広く使われている動画編集技術です。UGCプラットフォームに必須と言っていいツールになります。&lt;/p&gt;&lt;p id=&quot;01df94a6-7efd-4b0d-beeb-b0d7f625fee6&quot; name=&quot;01df94a6-7efd-4b0d-beeb-b0d7f625fee6&quot;&gt;簡単に、短期間で質の高い動画を作ることができます。たくさんのSNS上の動画コンテンツがCapCutで作られていると言われています。&lt;/p&gt;&lt;figure id=&quot;6a58bc2d-4ca9-4e46-92ea-ed4c856dda34&quot; name=&quot;6a58bc2d-4ca9-4e46-92ea-ed4c856dda34&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;620&quot; src=&quot;https://assets.st-note.com/img/1708999269982-h8RN7d7dSy.png&quot; width=&quot;620&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;a4c4f24c-4a47-4cb1-9f42-fe9150d9a4b0&quot; name=&quot;a4c4f24c-4a47-4cb1-9f42-fe9150d9a4b0&quot;&gt;BytePlus AR&lt;/h3&gt;&lt;p id=&quot;81bdeff2-20a0-4edf-bae2-def927fc8911&quot; name=&quot;81bdeff2-20a0-4edf-bae2-def927fc8911&quot;&gt;BytePlusは、顧客の様々なシナリオでARソリューションを提供しています。&lt;br /&gt;BytePlusのAR技術には、Product AR, AR Try-on, SLAM, Landmark AR, Sky &amp;amp; Ground AR等がございます。ByteDanceのいろんなtoCアプリで利用され、業界で最も完成度の高いAIソリューションと言えます。&lt;/p&gt;&lt;p id=&quot;b0c879d4-47eb-48ee-9f7a-4c6ad72ab985&quot; name=&quot;b0c879d4-47eb-48ee-9f7a-4c6ad72ab985&quot;&gt;詳細の紹介は&lt;a href=&quot;https://bytedance.larkoffice.com/docx/doxcnxdqXDsqagiz2QJ3VnpNw0b&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;BytePlus AR Library&lt;/a&gt;をご参照ください。&lt;/p&gt;&lt;p id=&quot;4545814b-c66a-4b7d-9601-17a9517d91a0&quot; name=&quot;4545814b-c66a-4b7d-9601-17a9517d91a0&quot;&gt;&lt;a href=&quot;https://youtu.be/b1PtFsnFvxE&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;https://youtu.be/b1PtFsnFvxE&lt;/a&gt;&lt;/p&gt;&lt;h3 id=&quot;0d571fa7-348e-46b5-b34e-6ccd447248a9&quot; name=&quot;0d571fa7-348e-46b5-b34e-6ccd447248a9&quot;&gt;BytePlus VideoOne Solution&lt;/h3&gt;&lt;p id=&quot;ce9ec77b-25d3-4481-b6f7-c4d91c932e62&quot; name=&quot;ce9ec77b-25d3-4481-b6f7-c4d91c932e62&quot;&gt;BytePlus VideoOneは今までご紹介した複数のビデオサービスを統合したソリューションになります。&lt;br /&gt;MediaLive, VoD, RTCの他EffectsとVideo Editor機能も含まれており、そのものを実現できる強力なソリューションと言えます。&lt;/p&gt;&lt;figure id=&quot;bf43e5bc-33dd-4747-a5bf-d0926875daa9&quot; name=&quot;bf43e5bc-33dd-4747-a5bf-d0926875daa9&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;300&quot; src=&quot;https://assets.st-note.com/img/1708999291687-jGmevVev7v.png&quot; width=&quot;620&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p id=&quot;b025ede6-cf27-452f-852f-7c802297f803&quot; name=&quot;b025ede6-cf27-452f-852f-7c802297f803&quot;&gt;デモアプリもあります。&lt;br /&gt;アプリストアで　BytePlus VideoOneダウンロードしてみてください。&lt;/p&gt;&lt;figure id=&quot;f567a253-69b4-448f-8296-81b201c1310c&quot; name=&quot;f567a253-69b4-448f-8296-81b201c1310c&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;1341&quot; src=&quot;https://assets.st-note.com/img/1708999310064-NUNDsmqauV.png&quot; width=&quot;620&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;2ffb6399-f64e-4b8f-b934-d00000629594&quot; name=&quot;2ffb6399-f64e-4b8f-b934-d00000629594&quot;&gt;BytePlus CDN&lt;/h3&gt;&lt;p id=&quot;06817452-2d66-489f-a525-4898724aaac1&quot; name=&quot;06817452-2d66-489f-a525-4898724aaac1&quot;&gt;CDNサービスも提供しております。&lt;br /&gt;最新のHWとアーキテクチャを採用しており、低遅延、グローバルカバレッジ、コストパフォマンスが高いCDNになります。&lt;/p&gt;&lt;figure id=&quot;25bb0891-7e70-4df6-be50-fe93dcc0cb13&quot; name=&quot;25bb0891-7e70-4df6-be50-fe93dcc0cb13&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;322&quot; src=&quot;https://assets.st-note.com/img/1708999322216-puEAEu7TIl.png&quot; width=&quot;620&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;f50fae33-0090-420f-88c5-9b3e6c9054cb&quot; name=&quot;f50fae33-0090-420f-88c5-9b3e6c9054cb&quot;&gt;BytePlus SMS&lt;/h3&gt;&lt;p id=&quot;6f0d56f1-5969-45cc-9419-0b2675d42e13&quot; name=&quot;6f0d56f1-5969-45cc-9419-0b2675d42e13&quot;&gt;SMSサービスも全世界を展開しています。&lt;br /&gt;本人認証用のワンタイムパスワードやマーケティングメッセージ等に使われます。&lt;br /&gt;到達率が高く、コストパフォマンスが高い　等のメリットがあります。&lt;/p&gt;&lt;figure id=&quot;1de6b56c-06b4-4cd1-85da-a7bb2df74858&quot; name=&quot;1de6b56c-06b4-4cd1-85da-a7bb2df74858&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;306&quot; src=&quot;https://assets.st-note.com/img/1708999334868-Se3F5qgHsX.png&quot; width=&quot;620&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;b2defb3b-3e6e-467b-b07a-4d58fd4196db&quot; name=&quot;b2defb3b-3e6e-467b-b07a-4d58fd4196db&quot;&gt;ByteHouse&lt;/h3&gt;&lt;p id=&quot;88580c20-4dcd-4fb8-8e71-5f892d2ea2be&quot; name=&quot;88580c20-4dcd-4fb8-8e71-5f892d2ea2be&quot;&gt;クラウドネイティブのデータウェアハウスです。&lt;/p&gt;&lt;figure id=&quot;f096ee25-138b-497b-8aec-4f20de055699&quot; name=&quot;f096ee25-138b-497b-8aec-4f20de055699&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;301&quot; src=&quot;https://assets.st-note.com/img/1708999346911-1gZc5iIic7.png&quot; width=&quot;620&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure id=&quot;c180656c-0666-4da6-aa38-fef275e4d422&quot; name=&quot;c180656c-0666-4da6-aa38-fef275e4d422&quot;&gt;&lt;img alt=&quot;&quot; contenteditable=&quot;false&quot; draggable=&quot;false&quot; height=&quot;346&quot; src=&quot;https://assets.st-note.com/img/1708999357953-wRvcGsgIWH.png&quot; width=&quot;620&quot; /&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;15dfe983-840c-49a8-85d1-68b822097b73&quot; name=&quot;15dfe983-840c-49a8-85d1-68b822097b73&quot;&gt;最後&lt;/h3&gt;&lt;p id=&quot;724edcda-d49d-4864-a5ea-c1211a7d4959&quot; name=&quot;724edcda-d49d-4864-a5ea-c1211a7d4959&quot;&gt;長くなりましたが、今後もいろんなサービスをリリースする予定です。&lt;br /&gt;LLM、CapCut for Business等&lt;/p&gt;&lt;p id=&quot;2d196953-1db3-452b-86e5-152a025ccc86&quot; name=&quot;2d196953-1db3-452b-86e5-152a025ccc86&quot;&gt;ここまで読んでいただきありがとうございます。ぜひBytePlusを注目しておいてください。&lt;/p&gt;</description><link>http://viewse.blogspot.com/2024/02/byteplus.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-4001777845956124452</guid><pubDate>Fri, 21 Aug 2020 08:15:00 +0000</pubDate><atom:updated>2020-08-21T17:15:48.097+09:00</atom:updated><title>CDP 7.1でAtlasをインストール</title><description>&lt;!DOCTYPE html&gt;
&lt;html&gt;

&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;CDP 7.1でAtlasをインストール&lt;/title&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;https://stackedit.io/style.css&quot; /&gt;
&lt;/head&gt;

&lt;body class=&quot;stackedit&quot;&gt;
  &lt;div class=&quot;stackedit__html&quot;&gt;&lt;p&gt;Cloudera Data Platform（CDP）7.1.1をインストールし、Atlasを追加する際に必要な作業をメモしておきます。&lt;/p&gt;
&lt;p&gt;CDP 7.1.1は２０２０年５月末にGAになりました。CDH6/HDP3系の進化版となっています。&lt;br&gt;
インストール後の画面は以下です。&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/a594f865-73f3-1713-472c-872a84d40230.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;Atlasをインストールするにはいくつかコンポーネントを先にインストールしないといけません。&lt;/p&gt;
&lt;p&gt;大まかな手順&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Zookeeper, Kafka, Solr(CDP-infra-solr)を「サービスの追加」からインストール&lt;/li&gt;
&lt;li&gt;Solrの起動に以下のエラーで失敗した場合、「Solrの初期化」と「HDFSホームディレクトリの作成」を実施&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;Unable to set the cluster property due to following error : Error setting cluster property
Error: Unable to set the cluster property in ZK
ERROR: Failed to configure urlScheme property for Solr cluster in Zookeeper
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/033dc4da-44ec-f8be-8924-73a2156c20fb.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Atlasのアクションで「Create HBase tables for Atlas」を実行&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/6f1c3df9-ea25-910e-0389-1dc7c2e492a6.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;続いてAtlasの初期化を実施。Atlasプロセスを停止してからやらないと、「Initialize Atlas」はグレーになります。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/1b702790-9bea-2e53-7ddf-6ed8b94d7538.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;初期化のログ。Solrにvertex_index, edge_index, fulltext_indexが作成される。&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/f6461082-105e-f34e-4ef6-0b83e771c72d.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;これでAtlasのUIにアクセスできるようになります。&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</description><link>http://viewse.blogspot.com/2020/08/cdp-71atlas.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-3264696201573924091</guid><pubDate>Thu, 10 Oct 2019 14:14:00 +0000</pubDate><atom:updated>2019-10-10T23:15:01.970+09:00</atom:updated><title>Intel MKLのようなネイティブな数学ライブラリでSpark機械学習アルゴリズムを加速する</title><description>&lt;!DOCTYPE html&gt;
&lt;html&gt;

&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;Intel MKLのようなネイティブな数学ライブラリでSpark機械学習アルゴリズムを加速する&lt;/title&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;https://stackedit.io/style.css&quot; /&gt;
&lt;/head&gt;

&lt;body class=&quot;stackedit&quot;&gt;
  &lt;div class=&quot;stackedit__html&quot;&gt;&lt;p&gt;最近、仕事上でSpark MLlibのSVD（特異値分解）でMovieLensの推薦を実装するアプリの性能調査をしております。思った以上遅くて困っていました。SparkのDriver, Executorのメモリ、Executor数、OverHeadなどいろんなSparkパラメーターを調整して試してきましたが、なかなか改善できていません。&lt;/p&gt;
&lt;p&gt;そして更に調査したところ、そもそもSpark MllibのSVDの実装が古いらしく、性能が出ない情報がネット上で結構上がっています。Workaroundとしては、SVDの代わりにAlternating Least Squares（ALS）などを使うか、あるいはネイティブな数学演算ライブラリを使って高速化するか　などがあります。&lt;/p&gt;
&lt;p&gt;今回はHDP上でIntel MKLを利用するための設定方法をご紹介します。&lt;/p&gt;
&lt;p&gt;まず、ClouderaのBlogを参照しています。CDHのクラスタの場合はMKLのParcelsファイルが提供されているため、Cloudera Managerから簡単にインストールすることができます。&lt;br&gt;
Using Native Math Libraries to Accelerate Spark Machine Learning Applications&lt;br&gt;
&lt;a href=&quot;https://docs.cloudera.com/documentation/guru-howto/data_science/topics/ght_native_math_libs_to_accelerate_spark_ml.html#using_native_math_libs_with_spark_machine_learning&quot;&gt;https://docs.cloudera.com/documentation/guru-howto/data_science/topics/ght_native_math_libs_to_accelerate_spark_ml.html#using_native_math_libs_with_spark_machine_learning&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;native-math-libraries-for-spark-ml&quot;&gt;Native Math Libraries for Spark ML&lt;/h1&gt;
&lt;p&gt;Spark MLlibは、Breeze線形代数パッケージを使用しています。Breezeは最適化な数値処理を行うにはnetlib-javaというライブラリに依存する。 netlib-javaは、低レベルのBLAS、LAPACK、およびARPACKライ​​ブラリのラッパーです。しかし、ライセンス関連の制限でCDHのSpark,あるいはApache CommunityのSparkに既定でnetlib-javaのネイティブなプロキシが含まれていません。特に手動で何も設定していない場合、netlib-javaはF2JというJavaベースのライブラリを使います。&lt;/p&gt;
&lt;p&gt;ネイティブな数学ライブラリを使っているか、JavaベースのF2Jを使っているか　Spark-shellで確認できます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;scala&amp;gt; import com.github.fommil.netlib.BLAS
import com.github.fommil.netlib.BLAS

scala&amp;gt; println(BLAS.getInstance().getClass().getName())
com.github.fommil.netlib.F2jBLAS
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;com.github.fommil.netlib.F2jBLASが表示されている場合は、F2jを使っていることを確認できます。&lt;/p&gt;
&lt;h1 id=&quot;intel-mklのインストールと設定&quot;&gt;Intel MKLのインストールと設定&lt;/h1&gt;
&lt;p&gt;Intel MKL（Intel’s Math Kernel Library）を利用することで、(Alternating Least Squares (ALS) algorithm),Latent Dirichlet Allocation (LDA), Primary Component Analysis (PCA),　Singular Value Decomposition (SVD) といったアルゴリズムを使ったモデル訓練を高速化することができます。&lt;/p&gt;
&lt;h2 id=&quot;intel-mklインストール&quot;&gt;Intel MKLインストール&lt;/h2&gt;
&lt;p&gt;各Sparkノードで実施&lt;br&gt;
&lt;a href=&quot;https://software.intel.com/en-us/articles/installing-intel-free-libs-and-python-yum-repo&quot;&gt;https://software.intel.com/en-us/articles/installing-intel-free-libs-and-python-yum-repo&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# curl -O https://yum.repos.intel.com/mkl/setup/intel-mkl.repo &amp;gt; /etc/yum.repos.d/intel-mkl.repo
# sudo yum -y install intel-mkl-2019.3-062
intel-mkl-&amp;lt;VERSION&amp;gt;.&amp;lt;UPDATE&amp;gt;-&amp;lt;BUILD_NUM&amp;gt;の形式で指定
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/f33f3e5f-dab0-0c58-a21b-0e3dc54496b8.png&quot; alt=&quot;image.png&quot;&gt;&lt;br&gt;
MKLのインストール先は/opt/intel/mkl になります。&lt;/p&gt;
&lt;h2 id=&quot;mklwrapperのダウンロード&quot;&gt;mklWrapperのダウンロード&lt;/h2&gt;
&lt;p&gt;mklWrapper.jarとmkl_wrapper.soを以下のリンクからダウンロードする&lt;br&gt;
&lt;a href=&quot;https://github.com/Intel-bigdata/mkl_wrapper_for_non_CDH&quot;&gt;https://github.com/Intel-bigdata/mkl_wrapper_for_non_CDH&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Copy mkl_wrapper.jar to /opt/intel/mkl/wrapper/mkl_wrapper.jar
Copy mkl_wrapper.so to /opt/intel/mkl_wrapper/mkl_wrapper.so
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;spark-configuration&quot;&gt;Spark Configuration&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;# echo &quot;/opt/intel/mkl/lib/intel64&quot; &amp;gt; /etc/ld.so.conf.d/mkl_blas.conf
# ldconfig
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;ambariでspark-default設定を追加&quot;&gt;AmbariでSpark-default設定を追加&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;propety&lt;/th&gt;
&lt;th&gt;value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;spark.driver.extraClassPath&lt;/td&gt;
&lt;td&gt;/opt/intel/mkl/wrapper/mkl_wrapper.jar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;spark.executor.extraClassPath&lt;/td&gt;
&lt;td&gt;/opt/intel/mkl/wrapper/mkl_wrapper.jar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;spark.driver.extraJavaOptions&lt;/td&gt;
&lt;td&gt;-Dcom.github.fommil.netlib.BLAS=com.intel.mkl.MKLBLAS -Dcom.github.fommil.netlib.LAPACK=com.intel.mkl.MKLLAPACK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;spark.executor.extraJavaOptions&lt;/td&gt;
&lt;td&gt;-Dcom.github.fommil.netlib.BLAS=com.intel.mkl.MKLBLAS -Dcom.github.fommil.netlib.LAPACK=com.intel.mkl.MKLLAPACK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;spark.driverEnv.MKL_VERBOSE&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;spark.executorEnv.MKL_VERBOSE&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;p&gt;実際の設定 Custom Spark2-defaults&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/9db469df-5fac-dc7e-f125-d7bb86c10be4.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;spark.executor.extraJavaOptionsは Advanced spark2-defaultsにあります。すでにあった値の後ろに追加する&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/188e008f-919c-ac1a-22c5-205b74578bf9.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;確認&quot;&gt;確認&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/12c7351f-92f4-479c-0eb9-b76b0e521580.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;com.intel.mkl.MKLBLASが表示されることを確認できます。&lt;/p&gt;
&lt;p&gt;そして再度SVDを実行してみたところ、前に比べて３0％〜35%の時間短縮することができました。&lt;br&gt;
アルゴリズムによって加速する度合いが違いますので、ALSの場合は4.3倍も速いという結果が出ています。ぜひ試してみてください。&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</description><link>http://viewse.blogspot.com/2019/10/intel-mklspark.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-6633915193605954540</guid><pubDate>Thu, 10 Oct 2019 08:30:00 +0000</pubDate><atom:updated>2019-10-10T17:30:42.379+09:00</atom:updated><title>HDP3 Hive Warehouse connectorを使ってSparkからHiveテーブルにアクセスする</title><description>&lt;!DOCTYPE html&gt;
&lt;html&gt;

&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;HDP3 Hive Warehouse connectorを使ってSparkからHiveテーブルにアクセスする&lt;/title&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;https://stackedit.io/style.css&quot; /&gt;
&lt;/head&gt;

&lt;body class=&quot;stackedit&quot;&gt;
  &lt;div class=&quot;stackedit__html&quot;&gt;&lt;p&gt;HDP3の環境でSparkからHiveテーブルにアクセスする方法をご紹介します。&lt;/p&gt;
&lt;p&gt;HDP以前のバージョンはSpark HiveContext/SparkSession を使ってHiveテーブルにアクセスしていますが、HDP3はHortonworksが開発したHive Warehouse Connector（HWC)を使ってアクセスすることができます。&lt;br&gt;
以下の図の通り、HDP３でSparkとHiveそれぞれMetadataを持っています。お互いへのアクセスはHWC経由になります。&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/17cf2a8f-5512-86b9-0a5a-0ad6f3833566.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;hive-warehouse-connector&quot;&gt;Hive Warehouse Connector&lt;/h2&gt;
&lt;p&gt;Hive LLAPを使ってSparkのDataFrameをHiveテーブルにWrite, HiveテーブルデータをDataFrameにReadするためのライブラリになっています。&lt;br&gt;
Hive LLAPを有効にする必要があります。&lt;/p&gt;
&lt;p&gt;HWCは以下のアプリケーションをサポートしています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spark-shell&lt;/li&gt;
&lt;li&gt;Pyspark&lt;/li&gt;
&lt;li&gt;Spark-submit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使い方としてはこちらをご参照ください。&lt;br&gt;
HiveWarehouseSession API operations&lt;br&gt;
&lt;a href=&quot;https://docs.cloudera.com/HDPDocuments/HDP3/HDP-3.0.1/integrating-hive/content/hive_hivewarehousesession_api_operations.html&quot;&gt;https://docs.cloudera.com/HDPDocuments/HDP3/HDP-3.0.1/integrating-hive/content/hive_hivewarehousesession_api_operations.html&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;hwc使うための設定&quot;&gt;HWC使うための設定&lt;/h2&gt;
&lt;p&gt;設定手順は以下のリンクに詳しく書いてあります。&lt;br&gt;
&lt;a href=&quot;https://docs.cloudera.com/HDPDocuments/HDP3/HDP-3.0.1/integrating-hive/content/hive_configure_a_spark_hive_connection.html&quot;&gt;https://docs.cloudera.com/HDPDocuments/HDP3/HDP-3.0.1/integrating-hive/content/hive_configure_a_spark_hive_connection.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;基本的にAmbariでCustom spark-2-defaultsに以下のプロパティを設定する&lt;/p&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;Property&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;Description&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;Comments&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;spark.sql.hive.hiveserver2.jdbc.url&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;URL for HiveServer2 Interactive&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;In Ambari, copy the value from Services &amp;gt; Hive &amp;gt; Summary &amp;gt; HIVESERVER2 INTERACTIVE JDBC URL.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;spark.datasource.hive.warehouse.metastoreUri&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;URI for metastore&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Copy the value from hive.metastore.uris. For example, thrift://mycluster-1.com:9083.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;spark.datasource.hive.warehouse.load.staging.dir&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;HDFS temp directory for batch writes to Hive&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;For example, /tmp.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;spark.hadoop.hive.llap.daemon.service.hosts&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Application name for LLAP service&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Copy value from Advanced hive-interactive-site &amp;gt; hive.llap.daemon.service.hosts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;spark.hadoop.hive.zookeeper.quorum&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Zookeeper hosts used by LLAP&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Copy value from Advanced hive-sitehive.zookeeper.quorum.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;p&gt;実際の設定画面です&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/4ba71d2d-83ac-6418-653b-929f3b06c3cc.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;で、注意する必要があるのが、spark.sql.hive.hiveserver2.jdbc.urlです。&lt;br&gt;
手順で直接Ambari上の HIVESERVER2 INTERACTIVE JDBC URLをコピーするってかいてありますが、実行時にPermission Errorのエラーが表示される場合があります。&lt;br&gt;
例えばPysparkの場合&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pyspark --jars /usr/hdp/current/hive_warehouse_connector/hive-warehouse-connector-assembly-1.0.0.3.1.0.0-78.jar --py-files /usr/hdp/current/hive_warehouse_connector/pyspark_hwc-1.0.0.3.1.0.0-78.zip


Error
py4j.protocol.Py4JJavaError: An error occurred while calling o72.executeQuery.
: java.lang.RuntimeException: java.io.IOException: shadehive.org.apache.hive.service.cli.HiveSQLException: java.io.IOException: org.apache.hadoop.hive.ql.metadata.HiveException: Failed to compile query: org.apache.hadoop.hive.ql.security.authorization.plugin.HiveAccessControlException: Permission denied: user [anonymous] does not have [USE] privilege on [default]
    at com.hortonworks.spark.sql.hive.llap.HiveWarehouseDataSourceReader.readSchema(HiveWarehouseDataSourceReader.java:130)
    at org.apache.spark.sql.execution.datasources.v2.DataSourceV2Relation$.apply(DataSourceV2Relation.scala:56)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/d9d7f817-616e-b63b-082c-93f1ee065597.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;解決策２つがあります。&lt;br&gt;
１, HIVESERVER2 INTERACTIVE JDBC URLの後ろにユーザーを指定する。例えばuser=hive&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;jdbc:hive2://hdp-srv2.demotest.com:2181,hdp-srv1.demotest.com:2181,hdp-srv4.demotest.com:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2-interactive;user=hive
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2, コードの中にHiveWarehouseSession作成時にユーザーを指定する。例：.userPassword(‘hive’,‘hive’)&lt;br&gt;
ソースコードからヒントを得ました。&lt;br&gt;
&lt;a href=&quot;https://github.com/hortonworks/hive-warehouse-connector/blob/HDP-3.1.0.158/python/pyspark_llap/sql/session.py&quot;&gt;https://github.com/hortonworks/hive-warehouse-connector/blob/HDP-3.1.0.158/python/pyspark_llap/sql/session.py&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;from pyspark_llap import HiveWarehouseSession
hive = HiveWarehouseSession.session(spark).userPassword(&#39;hive&#39;,&#39;hive&#39;).build()
hive.setDatabase(&quot;default&quot;)
hive.executeQuery(&quot;select * from test_table&quot;).show()
hive.showTables().show()
hive.showDatabases().show()
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;zeppelin-spark-interpreterから接続する際の設定&quot;&gt;Zeppelin Spark Interpreterから接続する際の設定&lt;/h2&gt;
&lt;p&gt;ZeppelinからHiveにアクセスする場合もZeppelin側での設定が必要です。&lt;br&gt;
詳細の設定はこちら&lt;br&gt;
&lt;a href=&quot;https://docs.cloudera.com/HDPDocuments/HDP3/HDP-3.0.1/integrating-hive/content/hive_zeppelin_configuration_hivewarehouseconnector.html&quot;&gt;https://docs.cloudera.com/HDPDocuments/HDP3/HDP-3.0.1/integrating-hive/content/hive_zeppelin_configuration_hivewarehouseconnector.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;設定例&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/3f2a6f17-116a-c848-22b4-c0bd64b44849.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;ただし、実際にコード実行したら、以下のように pyspark_llapモジュールが見つかりません　というエラーが出力されます。&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/1ee4e194-2d1c-c20e-c632-3fcc46509524.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;調べたところ、Zeppelin側でspark.submit.pyfilesの設定がうまく動作しないバグがあるらしい。&lt;br&gt;
回避策として、コートの中に直接モジュールファイルをインポートする。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/45209e8e-5b13-dee4-713c-260d038a8dec.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;これでspark-shell, pyspark, zeppelinから使えるようになります。&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</description><link>http://viewse.blogspot.com/2019/10/hdp3-hive-warehouse-connectorsparkhive.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-5485660259136391573</guid><pubDate>Fri, 19 Jul 2019 14:59:00 +0000</pubDate><atom:updated>2019-07-20T00:00:02.661+09:00</atom:updated><title>Druidインストール後、Druid Coordinatorが起動失敗</title><description>&lt;!DOCTYPE html&gt;
&lt;html&gt;

&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;Druidインストール後、Druid Coordinatorが起動失敗&lt;/title&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;https://stackedit.io/style.css&quot; /&gt;
&lt;/head&gt;

&lt;body class=&quot;stackedit&quot;&gt;
  &lt;div class=&quot;stackedit__html&quot;&gt;&lt;p&gt;HDP 3.1にDruidを追加し、起動したところ、Druid Coordinatorが以下のエラーにより起動失敗しています。&lt;/p&gt;
&lt;p&gt;エラーログ&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2019-07-19T14:35:13,842 WARN [main] io.druid.metadata.SQLMetadataConnector - Exception creating table
org.skife.jdbi.v2.exceptions.CallbackFailedException: io.druid.java.util.common.ISE: Database default character set is not UTF-8.
  Druid requires its MySQL database to be created using UTF-8 as default character set.
        at org.skife.jdbi.v2.DBI.withHandle(DBI.java:284) ~[jdbi-2.63.1.jar:2.63.1]
        at io.druid.metadata.SQLMetadataConnector$2.call(SQLMetadataConnector.java:135) ~[druid-server-0.12.1.3.1.0.0-78.jar:0.12.1.3.1.0.0-78]
        at io.druid.java.util.common.RetryUtils.retry(RetryUtils.java:63) ~[java-util-0.12.1.3.1.0.0-78.jar:0.12.1.3.1.0.0-78]
        at io.druid.java.util.common.RetryUtils.retry(RetryUtils.java:81) ~[java-util-0.12.1.3.1.0.0-78.jar:0.12.1.3.1.0.0-78]
        at io.druid.metadata.SQLMetadataConnector.retryWithHandle(SQLMetadataConnector.java:139) ~[druid-server-0.12.1.3.1.0.0-78.jar:0.12.1.3.1.0.0-78]
        at io.druid.metadata.SQLMetadataConnector.retryWithHandle(SQLMetadataConnector.java:148) ~[druid-server-0.12.1.3.1.0.0-78.jar:0.12.1.3.1.0.0-78]
        at io.druid.metadata.SQLMetadataConnector.createTable(SQLMetadataConnector.java:189) [druid-server-0.12.1.3.1.0.0-78.jar:0.12.1.3.1.0.0-78]
        at io.druid.metadata.SQLMetadataConnector.createRulesTable(SQLMetadataConnector.java:287) [druid-server-0.12.1.3.1.0.0-78.jar:0.12.1.3.1.0.0-78]
        at io.druid.metadata.SQLMetadataConnector.createRulesTable(SQLMetadataConnector.java:553) [druid-server-0.12.1.3.1.0.0-78.jar:0.12.1.3.1.0.0-78]
        at io.druid.metadata.SQLMetadataRuleManagerProvider$1.start(SQLMetadataRuleManagerProvider.java:71) [druid-server-0.12.1.3.1.0.0-78.jar:0.12.1.3.1.0.0-78]
        at io.druid.java.util.common.lifecycle.Lifecycle.start(Lifecycle.java:311) [java-util-0.12.1.3.1.0.0-78.jar:0.12.1.3.1.0.0-78]
        at io.druid.guice.LifecycleModule$2.start(LifecycleModule.java:134) [druid-api-0.12.1.3.1.0.0-78.jar:0.12.1.3.1.0.0-78]
        at io.druid.cli.GuiceRunnable.initLifecycle(GuiceRunnable.java:101) [druid-services-0.12.1.3.1.0.0-78.jar:0.12.1.3.1.0.0-78]
        at io.druid.cli.ServerRunnable.run(ServerRunnable.java:50) [druid-services-0.12.1.3.1.0.0-78.jar:0.12.1.3.1.0.0-78]
        at io.druid.cli.Main.main(Main.java:116) [druid-services-0.12.1.3.1.0.0-78.jar:0.12.1.3.1.0.0-78]
Caused by: io.druid.java.util.common.ISE: Database default character set is not UTF-8.
  Druid requires its MySQL database to be created using UTF-8 as default character set.
        at io.druid.metadata.storage.mysql.MySQLConnector.tableExists(MySQLConnector.java:174) ~[?:?]
        at io.druid.metadata.SQLMetadataConnector$4.withHandle(SQLMetadataConnector.java:195) ~[druid-server-0.12.1.3.1.0.0-78.jar:0.12.1.3.1.0.0-78]
        at io.druid.metadata.SQLMetadataConnector$4.withHandle(SQLMetadataConnector.java:191) ~[druid-server-0.12.1.3.1.0.0-78.jar:0.12.1.3.1.0.0-78]
        at org.skife.jdbi.v2.DBI.withHandle(DBI.java:281) ~[jdbi-2.63.1.jar:2.63.1]
        ... 14 more
2019-07-19T14:35:13,846 ERROR [main] io.druid.cli.CliCoordinator - Error when starting up.  Failing.
org.skife.jdbi.v2.exceptions.CallbackFailedException: org.skife.jdbi.v2.exceptions.UnableToExecuteStatementException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table &#39;druid.druid_rules&#39; doesn
&#39;t exist [statement:&quot;SELECT id from druid_rules where datasource=:dataSource&quot;, located:&quot;SELECT id from druid_rules where datasource=:dataSource&quot;, rewritten:&quot;SELECT id from druid_rules where datasource=?&quot;, arg
uments:{ positional:{}, named:{dataSource:&#39;_default&#39;}, finder:[]}]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;MySqlの文字コードがUTF-8ではないため、テーブルが見つからない　というようなエラー&lt;/p&gt;
&lt;p&gt;早速MySqlでdatabase（druid)の文字コードを変更してみます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alter database druid character set utf8 collate utf8_general_ci;
use druid;
show variables like &quot;character_set_database&quot;;
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| character_set_database | utf8  |
+------------------------+-------+
1 row in set (0.00 sec)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これで起動成功しました。&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</description><link>http://viewse.blogspot.com/2019/07/druiddruid-coordinator.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-7894847980240853421</guid><pubDate>Thu, 27 Jun 2019 13:26:00 +0000</pubDate><atom:updated>2019-06-27T22:26:44.665+09:00</atom:updated><title>NiFi1.8からNiFi1.9にアップグレードのメモ</title><description>&lt;!DOCTYPE html&gt;
&lt;html&gt;

&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;NiFi1.8からNiFi1.9にアップグレードのメモ&lt;/title&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;https://stackedit.io/style.css&quot; /&gt;
&lt;/head&gt;

&lt;body class=&quot;stackedit&quot;&gt;
  &lt;div class=&quot;stackedit__html&quot;&gt;&lt;p&gt;一つのAmbariでHDP３．１とHDF3.3（NiFiだけを使っている）のクラスタを管理しています。NiFi1.8のPutHive3Streaming関連のメモリリークのバグがあるらしく、一定時間経つとをJVM OOMエラーを起こしてしまいます。&lt;/p&gt;
&lt;p&gt;There are unfortunately 2 memory leaks around this processor:&lt;br&gt;
one in the NiFi processor that was fixed in 1.9.0:&lt;br&gt;
&lt;a href=&quot;https://issues.apache.org/jira/browse/NIFI-5841&quot;&gt;https://issues.apache.org/jira/browse/NIFI-5841&lt;/a&gt;&lt;br&gt;
and one in the Hive client library,&lt;br&gt;
&lt;a href=&quot;https://issues.apache.org/jira/browse/HIVE-20979&quot;&gt;https://issues.apache.org/jira/browse/HIVE-20979&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;そこでAmbariとHDP3.1のコンポーネントのバージョンはそのまま、HDF3.3.0（NiFi1.8）からHDF3.4.1.1（NiFi1.9）へのアップグレードを試してみました。&lt;/p&gt;
&lt;p&gt;手順は概ねこちらになります&lt;/p&gt;
&lt;p&gt;NiFiなど関連コンポーネント停止&lt;br&gt;
&lt;a href=&quot;https://docs.hortonworks.com/HDPDocuments/HDF3/HDF-3.4.1.1/ambari-managed-hdf-upgrade/content/hdf-stop-hdf-services.html&quot;&gt;https://docs.hortonworks.com/HDPDocuments/HDF3/HDF-3.4.1.1/ambari-managed-hdf-upgrade/content/hdf-stop-hdf-services.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;HDFのManagement Packをアップグレード&lt;br&gt;
&lt;a href=&quot;https://docs.hortonworks.com/HDPDocuments/HDF3/HDF-3.4.1.1/ambari-managed-hdf-upgrade/content/upgrade-mpack-hdf-on-hdp.html&quot;&gt;https://docs.hortonworks.com/HDPDocuments/HDF3/HDF-3.4.1.1/ambari-managed-hdf-upgrade/content/upgrade-mpack-hdf-on-hdp.html&lt;/a&gt;&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/c44e4741-5abd-b705-c634-e7cab5447e0c.png&quot; alt=&quot;image.png&quot;&gt;&lt;br&gt;
手順７の中のHDF-3.4が書いてありますが、実際のところはHDF-3.4が存在していない、設定できないことになっています。&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/a2e4c06d-cafc-bc2e-1e2c-be917661ea0d.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;新しいバージョンを作る事も考えたのですが、バージョンの名前が共存できないため、新しい作ると、HDPのバージョンも合わせて変わってくるため、ちょっと危険の匂いがするので、やめておきました。&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/9d2f82d1-b04d-5d8c-8ef0-c14b06cfca15.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;そこで新しいバージョンのNiFiを手動で各サーバーでインストールしました。&lt;br&gt;
上の手順８のところ、各ノードに以下を追加&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;path=/
enabled=1
gpgcheck=0
[HDF-3.4-repo-1]
name=HDF-3.4-repo-1
baseurl=http://public-repo-1.hortonworks.com/HDF/centos7/3.x/updates/3.4.1.1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;次に、インストール。今回はNiFiとNiFI-toolkitだけ&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yum install -y nifi_3_4_1_1_4
yum install -y nifi_3_4_1_1_4-toolkit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;インストールされていることを確認&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/35d9d0be-8412-71b9-b731-3723e16f05e9.png&quot; alt=&quot;image.png&quot;&gt;&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/96f9d703-0b17-acb6-18b8-e076f8642b16.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;/usr/hdf/の下に２つバージョンのHDFが存在しています&lt;br&gt;
シンボリックリンクは古いバージョンのままになっています。&lt;br&gt;
以下を実行して、シンボリックリンクを変更します(直接変更してもいいですが。。）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;hdf-select set nifi 3.4.1.1-4
hdf-select set nifi-toolkit 3.4.1.1-4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/5fac1695-1531-2612-a43c-d3245898f864.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;最後にAmbariからnifi.propertiesに以下のプロパティを追加する&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nifi.nar.library.autoload.directory = {{nifi_internal_dir}}/work/extensions
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この状態でAmbariからNiFiを起動する&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/b01a3179-9730-6970-006d-d590ba090470.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;成功した！！&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</description><link>http://viewse.blogspot.com/2019/06/nifi18nifi19.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-2669115395230947065</guid><pubDate>Fri, 21 Jun 2019 03:44:00 +0000</pubDate><atom:updated>2019-06-21T12:44:20.077+09:00</atom:updated><title>MiNiFiでセンサーデータを取得し、NiFiに転送してHDFS、Hiveに書き込む</title><description>&lt;!DOCTYPE html&gt;
&lt;html&gt;

&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;MiNiFiでセンサーデータを取得し、NiFiに転送してHDFS、Hiveに書き込む&lt;/title&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;https://stackedit.io/style.css&quot; /&gt;
&lt;/head&gt;

&lt;body class=&quot;stackedit&quot;&gt;
  &lt;div class=&quot;stackedit__html&quot;&gt;&lt;p&gt;&lt;strong&gt;「センサーをラズパイに接続し、MiNiFiでセンサーデータをTailする。そしてNiFiに転送して、NiFiでHDFS, Hiveに書き込む」の手順をご紹介します。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;実現したいこと&quot;&gt;実現したいこと&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;MiNiFiでセンサーデータを取得し、NiFiに転送する&lt;/li&gt;
&lt;li&gt;NiFiでセンサーデータをRawデータとしてKafka経由でHDFSに保存する&lt;/li&gt;
&lt;li&gt;NiFiでセンサーデータをHiveテーブルに保存する&lt;/li&gt;
&lt;li&gt;NiFiでデータを加工し、温度が閾値を超えたら、Slackアラート通知する&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;環境情報&quot;&gt;環境情報&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;センサーをラズパイに接続&lt;/li&gt;
&lt;li&gt;ラズパイでセンサーデータを取るPythonスクリプト&lt;/li&gt;
&lt;li&gt;HDP3.1(Hadoop 3.1.1, Hive 3.1.0) &amp;amp; HDF 3.3.1(NiFi 1.8.0, Kafka 2.0.0)、クラスタは同一Ambariで管理&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;構成&quot;&gt;構成&lt;/h3&gt;
&lt;p&gt;構成は以下の様な感じになります。パース処理のところは一つしか書いてないですが、複数のパース処理の集合だと思ってください。&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/YntfXL0IrK1PG-D07WG5A6vvrUKY4rIGT5jha0uQEA7ptUT8bH1__4rahK0WJX5ni5eREZKYf9gJcOJsh9LSXDGr4yqPo7CxfPKkNS4LJTz8HGxoByhXiBL7h9oLoRYX-4-uI1zhMbPbqdARBQE7Aa3JwLQ-yVncQKFmrImcmR8ozGznOdVFwT5VjZhxFuiLuFypThTOph3x3ZOzwdUv_KeGHA3thWJbwSgdRCbOwh7sV8dN8e7njJL8Ouoohx4_5w7MtNQ4yw9Z4t2B9oGp3P9sBCiyOKSRm_95BEWsFk2BLab_u9nb3egSXHOcX3c2qCwsrZtfZQ6IUVMPQB8FOG3k6tvxnU_CFhzPYIZ1Fb6nvL5KKgKMs3Vk7p06w7AzMd9RH_NDzPn69QOlCZKqucDVYUcRXda3dMqRp6vs2iFyR5u529WCYGPyWp0jG3C4qfOfnJzD6N1ZHJioiOikcehg0Wx8eDYjEGFN9mdaQfOUafPaf7LizAtEgGtaiNCG-mfSqz2ESpdZzk6IYibb7iz-_uXxsHW15L1Zxd9LdZChoLXUeoIqq-g-LIcaTp53kJ0_PBvKTbmlg2CXpgyQkOZO8-0nOILYr77rDYZQcpsWK9IOYzt3U8M30yPTNplKcaF-FFYpwmiErKTnhKa0Lo3HCQ1Jvqc=w1552-h804-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;全体データフロー&quot;&gt;全体データフロー&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;RemoteMiNiFiというInput portとProcessDataというPrecess Groupで構成されています。&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/gAH0AHENaXp0fYl_A4DZdj-oZ3TrHilGrOjn69td6PBiyMPMrQEPfVzrGfq94x0MrP39UUnLUXYEf_jzEeB0WayTjyL8ZCii-R_QmLqgcMwpuMd7rBp2dLF0wiKgoGf3SoGckMQlhtYxF2S7CJynSJUTmEH9VW8eKD5M1UhwUvcD7MKGf94T9-o7s7j5dU0AJGMFXqcEUz11askxsu2EYbeUvHAQxb7vdzXeljTBxIywSRqvIiFqJqhC9sO8Bzq7dYdUOomHNX9uu7uZLQ4qTM2KgU0sFB99IscV1zRaITKK_BJrc9aZgE74K1_l3hLyN6bAx89lwcJm5XH_aHCGo0DS1tcnnFeSousRJXXIA0wWbG-ioBKtHOIxU2S-2gyA5FJBC53OrUa4Db1pVp3ozpBHfZYA_YOyKH4SFojVy-TA1n3tUWUXAQ4RSjQXP2lVAqgXugY5AHGH3JsBB2fi-x4h-zUk1LygY9kNMyVHX5afkG1O42xLRACFE174u5srgUtmpb1t8MRTf_eQ7cZpuOR0ONsgkAM1efoXwuyt6EXWU195G1CxpvagEGVmxXra3gF0X2ngZVAgVoxKoSwUgk7RQf2ZeJPAmo7yq8PqRN37beV7PPplD7cM6pdzxIqTgWj2Zq6H4DS9MuOvJGdKMm1SF1UcSRE=w1894-h610-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/li&gt;
&lt;li&gt;ProcessDataグループ内の詳細フロー&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/QVa_PGqbxzJlywAGpEqBaDIHRFEpZvA6wGyUicyaA9XB_l-3QgBmgrOs9UTR5NgGUz7-qHPa4pIgD6XGCAIXjOUBCx46-RpdMTi7BaIQRFgjJg6_HaC9OM2tzTX7Z3w8YjUEr1wdwhj1kwoaD6NXOTA4pCginU9VQZN9_CNSHoIJHpYEQ38fgxOg0VZb-W1gpvgPBuGNYxpoStx6ZEVPQsmTHZkjwA9GlhQBe0rX6Fw78RWDOxj-DpCUIPOoLDjNk_LtWkcnp9HnAnGd5JKbp7AKcfqZK460f3yuyg9gfQuB6llLbfXZyrh4Y6d1x69_5mJh9KZVOboHU8at1vMSIkYElzFRhkTimlfW5mnrPmMrKM_9d5RwQRl3tmgCOtQMP6aquOH-5qNPIwfI8Wf17acV4R9C9TmAieyhzYLFyN1ZkVNVzQOorCSZy2oNXHaAZbuTsLaQhNTd35ZBmPfOAMy6R27W0Z0_1Bqnqp00k8OWknZEX16DoIaU1memf3AB82pV4ChKaPsfXHP14Dpi6Y5SWFaRE_0u2NGPlDV-LbVM_8yOZcGLc_N3qxoZJnWmbPKI-g10phQgQKOOYcEaerT6EaMr4vTgMhl9uaopSg3TJmOlrEqNFm3iTeK3nZ84QHttis2iy0foFKS0RaPCLGGuSVwRIqk=w2064-h1334-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;やってみよう&quot;&gt;やってみよう&lt;/h3&gt;
&lt;h3 id=&quot;１、minifiのセットアップ&quot;&gt;１、MiNiFiのセットアップ&lt;/h3&gt;
&lt;p&gt;ラズパイ自体のOSインストールや、センサーとの接続ができた状態（ここでは割愛します）でMiNiFiのインストールをやります。&lt;br&gt;
MiNiFiのTarファイルはHortonworksサイトにあります。&lt;br&gt;
&lt;a href=&quot;https://docs.hortonworks.com/HDPDocuments/HDF3/HDF-3.3.1/release-notes/content/hdf_repository_locations.html&quot;&gt;https://docs.hortonworks.com/HDPDocuments/HDF3/HDF-3.3.1/release-notes/content/hdf_repository_locations.html&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo su -
cd /home/pi

#HortonworksのサイトからMiNiFiのtarファイルをダウンロードする
curl -O http://public-repo-1.hortonworks.com/HDF/3.3.1.0/minifi-0.6.0.3.3.1.0-10-bin.tar.gz
curl -O http://public-repo-1.hortonworks.com/HDF/3.3.1.0/minifi-toolkit-0.6.0.3.3.1.0-10-bin.tar.gz

#ファイル解答し、シンボリックリンクを作成する
tar -zxvf minifi-0.6.0.3.3.1.0-10-bin.tar.gz
tar -zxvf minifi-toolkit-0.6.0.3.3.1.0-10-bin.tar.gz
ln -s minifi-0.6.0.3.3.1.0-10 minifi
ln -s minifi-toolkit-0.6.0.3.3.1.0-10 tool_minifi

#MiNiFiをインストールする
./minifi/bin/minifi.sh install
#必要に応じてリモートNiFiホストを/etc/hostsに追加する
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;２、センサーデータをpythonスクリプトで取得&quot;&gt;２、センサーデータをPythonスクリプトで取得&lt;/h3&gt;
&lt;p&gt;Pythonスクリプトは/home/pi/bme280-dataフォルダに2019-06-04.csvのようなファイルが生成されます。&lt;/p&gt;
&lt;p&gt;中身は：「&lt;strong&gt;センサーID, 日付, 時間, 気圧, 温度, 湿度&lt;/strong&gt;」のカンマ区切りのデータになります。&lt;br&gt;
&lt;strong&gt;1,2019-06-04,23:59:51,1011.54,24.86,50.67&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#coding: utf-8
import bme280_custom
import datetime
import os

dir_path = &#39;/home/pi/bme280-data’
now = datetime.datetime.now()
filename = now.strftime(&#39;%Y-%m-%d’)
label = now.strftime(&#39;%H:%M:%S’)
csv = bme280_custom.readData()
if not os.path.exists(&#39;/home/pi/bme280-data’):
　　os.makedirs(&#39;/home/pi/bme280-data’)
f = open(&#39;/home/pi/bme280-data/&#39;+filename+&#39;.csv&#39;,&#39;a’)
f.write(&#39;1,&#39;+filename +&quot;,&quot;+label+&quot;,&quot;+csv+&quot;\n&quot;)
f.close()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このスクリプトをCronとかで定期的に実行するように設定する（例えば10秒ごとに実行）&lt;/p&gt;
&lt;h3 id=&quot;３、nifiでデータフローを作成し、minifiに配布&quot;&gt;３、NiFiでデータフローを作成し、MiNiFiに配布&lt;/h3&gt;
&lt;p&gt;MiNiFiで直接データフローを作成するのが難しいので、NiFiで作成して、テンプレート（.xml)としてエクスポート、MiNiFi toolkitで.xmlを.ymlに変換するのが一般的です。&lt;br&gt;
今回はTailFileプロセッサとRemoteProcessGroupを使います。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NiFiのTop画面でInput portを追加する。名前をRemoteMiNiFiに設定する&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/9o7pS1GfARbTkrwDmsukXH77B1Wge5owdPILVIBpcCwWKwpmRWxTPuC7pf3rS-DN_H9MDwTWcld91m2CcXnngZ37UK7cVMXVnOFba8-MuV01_kfP9-fwtJvogsjO7IMx-ryHWZqeQRFn3Qj9t_jMcjzV08zNbA5X5G6U15OqUgFH6MshyjfDWeYkIeLWS-4DxBcCeZ4m2UofEfiV49trzW7V6AClNEXCNuKDszz_6MTWaj6dXyUi5S164YlUWTTHL-M3o_ViSUABK95QNDBluGh14hVR3DFV3OVXTKVcHXd7fEiJNCk-_jzYmtWC8TM_guZCOeVIsrH7eLis9_eObFCSUERvn1ukUVe-jwFlH2OD3CSkwhP5CYrs_5vUd2pIotGfVfaO1hsiS25fZ7TnWGpnTQnyYv1cjV52gWJxbiVs-BExAJSkZROJK8CTu9IcdISuOY0PZfN311_IYg_3sTu9WEq91cC9AIoDdPlK_-cA27Ji8mb8hNkHN8AseFh-owBY5MUClVlUyJvg59gMMIZpgUgcH6r2ThM5rr3Uwgq-LeibKE5hpGvshyRPYXBtnzHrxav9odxs58oslH7Kq0pNDqBWTMmsEBq6idIGmBjmbRpra7tIAn6fyZiWMUDlmkqASUO9pSVCu0sSNVyYG6wGIVazZJs=w682-h482-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/li&gt;
&lt;li&gt;TailFileプロセッサでフォルダの.csvファイルを取り込みます。以下のプロパティを設定します。&lt;br&gt;
Tailing mode：　		&lt;strong&gt;Multiple files&lt;/strong&gt;&lt;br&gt;
File(s) to Tail：　		&lt;strong&gt;.*.csv&lt;/strong&gt;&lt;br&gt;
Base Directory：		&lt;strong&gt;/home/pi/bme280-data&lt;/strong&gt;&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/HjMFeIkC4HloHXFOahbzF8xEWRZbTArwEdGCSWWCTOuFvE0L7-nq6EhzuBitJdiYuBnq2hClYhUORvPxvhmupnMpJn7fFHjIZzAZgCVkj3csVIzUjon38zY_zZRYQFy40_R9sCdtpBGtbi-cAO5pJeN_W1FX9TgPVpIrj5vLghnMwGsRTWGBMmJHG9BZyaCLJdxvA2w-AKFwYoz8g7ZFQ0H2xAH7COOunGUP3v1n67zYE8SL9IIPWQREFTh4KBQUECFl4VJ4YTTFlc57q4aa5uusIx_BGqjf9C_nQ57RGNiBMJOuZ00M0J8G61P4NTTRnRXMdj-9cAgz44ffH2s0jwrgAyLlzvTbX6Gu8oe3dvj37bj_25VPt5E99wM6dGbquVNymRoluKbuMMiV1OQIEdxCM9DdncWoODxNKpjzHfsgFoA4VPr6_qficdUf1-B-ei2j8lZFll6Z0ZOd_kPP7RUH4SC5Wf4YWOtPzTS9zQXz9gIh_DutvWhz0PWQ8mUrDjlSfuNqgtDrh0QQ8Azfrta-llmx5vIBQ8LdPMqIfRbZlS4i5AU9yQZUR5FFLsnjGdiSJ7CyCsCJ6m46FZPY22Mo5qGedOtYYORR1rzuoruoGO3tJr8O39wku4iFBaFqiRzrdmOCgzDop_xkZZvCZ6eNUpUtRHE=w1568-h1118-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/li&gt;
&lt;li&gt;Remote Process Groupを以下のように設定して、RemoteMiNiFiをInput Portとして選択する&lt;br&gt;
URLsにNiFiのURL(&lt;strong&gt;&lt;code&gt;http://hdp-srv4.demotest.com:9090/nifi&lt;/code&gt;&lt;/strong&gt;)を指定する。複数ある場合は、カンマ区切りで入力する。&lt;br&gt;
Transport Protocolで&lt;strong&gt;HTTP&lt;/strong&gt;を選択する。&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/PVXdbZLTOjZqLJte44i6YNRv9lk1MYdDjPbeUIfc8UJOYapuJedjzvWhGwd2C3hilmVznGJxj8iQGvDl1zebLgs0A-yxO0-axUw8FaO-ptM4Be1AcH9-0Juxbv5Sj0Iwz3-uC-xRI_bifgYYM6am6xyZEdiWsGry6sqHniEB3v7Jy2wegD87tFluVGMHP1FNJsjBFvzJ6dbz0YQp2Gfw8cGT47-i-q6y4BHmsMUJkLz1XAeYC8pxZYGtGFbfVIQFtBd1KLpY6xzL_uVL770YQynkCM25eZ8Iv2c6rc7b9bWQQR8zJYEQcWkIeJpRFbIQxbaaNhTB0rW8sLjiTrtrM0C9S4wX64hQU59SDJw733MxcpRpT8z27-VW2igpUFhqZF0ERKVW8EQh27hszQSoxkmtzwnb9c30Xz_OUEBzNyixkUB12-p6WWvyfDlOUkPGcUzKtqrt6r1guc-_NWOnce0n8oRGzBLmM6SiVhrmwXIwc15jZsqk5FiRQ6mniTgfrT8DEhDFQF5wDtyayQQvwAqH9TPNQZzWUTlbCmtJbjjMqrRAIwa5M-IEbq3vCaPhj3Gt6duRrd8NldeRJT0fJs8jxCmIXZ-XwyLnP82k4VU4cGswSM6h-itT-SCCpSYiRKr5ohlzjL2xLA29V8b4m_AXVwGthiA=w1508-h1118-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/li&gt;
&lt;li&gt;作ったデータフローをテンプレートにエクスポートする&lt;br&gt;
TailFileプロセッサとRemoteProcessGroupを繋いで、全部選択して、右クリック、「Create template」でテンプレートを作成する。&lt;br&gt;
作成したら、ダウンロードする&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/jj5w8z33gg7lK-CKvV-TPgYaZW5-wXpbRHzd5IPsD3IhJ0017uC5RW54awerFEIzhNSx_CxbN3JEUONG2g8GDFbf6V_3_vAMXcO4EZQJuBtU8io_n1wGf29KIqqkw8wOpcDNXwwbEOWffffoa6QPJAnu-40yt5anQ3j2DzOwNF7g6FBzDjCwIc9J5PDQqbF1STxI_KhDfAp5c2n6S-eIC9w2AyLYWTZxIpziDSqSHpmCePCq-_I6WMjjOzGK2vM0_nmE_jx9ACTVD-gZmgFQGRrzkQuUnuxoC5k57N4DN6uHkUxhNq06DmpdJKwCo1htfKI9bHCDusILYlxQfj3H3zb93EDK5bXYKtzQwroKcwP4DvsZAnVZoSJxZ3W2uzyJaKvoqR1kAF_NrDQfSmUmgLMgFvNvrildQRsK5oAOK6IiQ6O04E4LF3LHBsaGHEa2RmlLTzlkPkqQ_oe-3QIDIM7Aizt7KetZxg0GyyyCNJlkYLwOj7aokJfbt8554RCzTQUpklp9ufvSwHwyZjxgKngkR7Xi8hTMbn32jGN-rNkykmuWqXL3Y4u5kRZGMy45dWI_bnxmbrPurgLK8MN1FjFmvRPruaGJ0ZKljP-wZAhL7VVpkXZnbPkt4FwCfdKYll7iVS9VbT0oLa2Txemq231TsmeLjks=w924-h802-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/li&gt;
&lt;li&gt;MiNiFiでテンプレートファイル（.xml）から.ymlファイルに変換する&lt;br&gt;
ラズパイにログインして、以下のコマンドでファイルを変換して、MiNiFiを起動する&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;sudo su -
cd /home/pi

#MiNiFi toolkitでxmlからymlに変換する
./tool_minifi/bin/config.sh transform /home/pi/sensor_minifi4.xml ./sensor_minifi4.yml

#既存のconfig.ymlファイルをバックアップし、新しいymlで上書きする
cp -p minifi/conf/config.yml minifi/conf/config.yml.bk
cp -p sensor_minifi4.yml minifi/conf/config.yml

#MiNiFiプロセスを起動する。他にstop, restartなどオプションがある
./minifi/bin/minifi.sh start
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ここまできたら、MiNiFiからセンサーデータをNiFiの方に転送できるようになります。&lt;/p&gt;
&lt;h3 id=&quot;４、nifiでセンサーデータをrawデータとしてkafka経由でhdfsに保存する&quot;&gt;４、NiFiでセンサーデータをRawデータとしてKafka経由でHDFSに保存する&lt;/h3&gt;
&lt;p&gt;ここからは、NiFiでセンサーデータをKafka経由でHDFSに保存するデータフローを作成していきます。&lt;br&gt;
全体のデータフローはこんな感じです。&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/kkMFO_5e-Rbfy65vOg3RXITIFet-Un7Tc_tVCyPh-jXU2JerEM7pr4NtCzYt-l9c9QWudn2p2iSuBcZ3AsVtS457vyduyazObyVkdYKBIbdY2X3MUAun97cU1ZqRNOO_OE_Jp7luEqJOkpELYnFEFmU4Acfc8p1sS6kz2iu1i0SgasIs5n8oB1WlnsIN5We-qxjPNEKqHidJ3q6kroZznhwCZ2f0Bf5PnKSjMdGPfFiSlnmBy2tJOsxeLDaY1rN1YN_nwnccLVeBgt1UAnZBKi_2XSqQtvdf6Y2gBZyoH36EShkRrNF3hh0w7xcwMSTwLBKVb-doUM2L41Tlz7KfDaDiCsG_9JfcYRLLsgeUa_H-86Q4gWqTPbWBPq_5BzLGjXrAXCA2kfCGAhp5Y4DFt_hWoJE-do0VfPezmTfEAst_H8pA6ldrQW6AfEaWBooWlb_iM5P7mdZfsIRUwzIhj-FbX-unj-jILfJmxYoMfZGypbxq_lLpDwTta23viWQjFyEcsxd45lA9_oexr007NuQjVRGCM3_YGaBNx11GCskFfPjh044byAhiZN3WUO_f-Te0Citlu54QR6YSXnjcbygPyCtbnhGPF-KAuFCUISUnXkPLE1g86eaPadRlKDEErePKD-xa7Obc75SS7iIKFUODSQ-Y9GM=w1784-h1494-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;NiFi画面でUser1というProcess Groupをドラッグ&amp;amp;ドロップする。すでに作成済みのRemoteMiNiFi input portと繋ぐ&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/gq6EKenOXOTgwHmY7a5sSEk7mzuOAoSVV7Jxomx-XPGxreIbeuYHotsIHtXjwgoaYz02gIW9O19j3BGxs5w8LHMz0SjamK4dtDNxTcDQW4ZJPMXasnP9fmOt3lRRSWatz9Bg-dLkRtyKeq3AddjDpJBxiz382EREhHJ5_Gk0gNGzuQ_1tZrtB6eyiuJyxudUsEYY2E3KHPKeYXe_D3-aNY5GGUmylB5bR4vrHrQqrHZAmKg5rUbDCv1px-nbjjTJ6i_TqfXQkdXHQbVNuhWGPiJbntMR__XhLNrz_kHkpNr76q2XjiUpN8vO2fkSsZ25dru32TI94u9us-nZqgO38a9hwoT0QFQOW-Pn2HbcsbpbfJqicPm7kwStl32y6hpdzxeJeYWRSWEHrkM5IklZ5046ecZZQtHIG3qCGxjFdwzxw2y9Wj2e5aRUvEu-Zc8nmrAEGp1zm69ZVXlf5j0ekBD8u4yaYUlYoeEZQCnTrjhGX_8vcn2jNixmyB-7rOZbVVboP0LL2McBGhp41G4w5q95jqcxlv2WV6Sw8JeDT-J-El8njouWxqdodcXb_SO9doMeCbl31Fh62aGgki2z6syk_Y_8tt2DS9t8wimND-JRR_AgjJerl_6GCzbNPSAZ-Kn_LyiEPR8EVWq_rQ1Sam743-2KHi0=w928-h1158-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;br&gt;
User1グループをダブルクリックで入って後続のフロー作成に入ります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;FromMinifiというInput portとPublishKafka_2_0プロセッサを作成して、繋ぐ&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/8ess921rKQOPHGHyneL2gI1ZUYmSYbGcD_n2H23SgIFUpZw5lEzkYkKkyjIGYq-hzDULku5CZkZ4WrrKi2HMNEEScM_oNBGVVsvpVCMC1ON3ivLBSOJyklmXrXDMjncQMMnbCgF0GjZskKMvVK7NwfMGMPVzREe7cz7mNMwPXkXzpRH7oh34roS0UiiG_NiKJ7t_UE6roAIAOH3fyjtbMD2ws0l8Cm06Zg6_Aupp49anXShynoBPZC9gVCZpEUyeNHN-LNzPJDTX7nzcGzndTWCJIAbQsGus8eHcdlFvKcjBT7nlMPw6X_06KYtor6EirfbGtiWziqneIzNCtTplGxEb7WWd0N2U8Ste7w22iRJuR-TZa-SzpMzzznUtPZF6PTH8tuTnWY37n4WFBT3XJXw0nxw-Ui-01b8niTPAS0SA9ecT8FosaAyvAqIAFvZG8gKR5JYlk7htUycCMwSab6_iUUiKwhWh2r84PDgfcEZRLe10qyu27IesHgN44KryU9Pr9aQfqEwoLwV3IWZijb6G6-EkMYBBdtMnGeT-YkvABymIE8D4q5WOkliy9OA9HNT-aKKtiu_2NoDwNbMEUAJZRwFtSOGlhh4VDDGqJYZ6Zj9m0YXjamQBSvXNQIKUcgdXTtI5NrtIjWNdxnsIR7PT991P4ss=w1022-h744-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;br&gt;
PublishKafka_2_0のPROPERTIESタブで必要なプロパティを設定する。&lt;br&gt;
Kafka Brokers: &lt;strong&gt;&lt;code&gt;hdp-srv1.demotest.com:6667,hdp-srv2.demotest.com:6667,hdp-srv3.demotest.com:6667&lt;/code&gt;&lt;/strong&gt;　を入力&lt;br&gt;
Topic Name: &lt;strong&gt;sensor_data_user1&lt;/strong&gt;&lt;br&gt;
Delivery Guarantee: &lt;strong&gt;Guarantee Replicated Delivery&lt;/strong&gt;　を選択&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/IEdzR82eOSyXdOYnfLSCyp4HYQtxmvLGiJ5KR0TJuSurkB13156Q6hdK8eQbnhPJZEGT9EEQAe-P-wX9DKZTaqvlR8GmutA0KL4-3uWlz6Oqho-j58fY3cVlmvo2vmQWEo4UQJv5RqWqwmDwEbHJH0t5XB4VOlSFc8Ps8phMzIgUHHdsiejM0ozzu27Yv7bNOxbpKwESlkQFNU_wgnevl6NRgsZvUaH31QaDU16k1pK51oz3d07w_50gUsMtwG5j-veSywqDhrSnYWL0pPzSjhxwxet_x3YwoAhDCW0YZ7od0qqev-nUx9w4fDnk0bsV8EWJ5p7oWQ2lrodh4A7B1mwELNwMYhrEYpeFXgkoYLVhm4QoV90DxZ1XoTsjFBwfzsSzYOPOUe4U9_7CZoyoHHBfGPeeql5-iWGua31I9IUESOFpPMxQqr0GyTa2tcJnbdkF5Pc9fLEBr4Fhjl-sI61ZBZsOj3t7B6bE1Ind4PMTKsylV8yv6eQOKt9Ah_Hs6xJtb1xtXSWj31pUVcE_drcqDz2AODuFBZmJo9-nFOrAOeO-zkEgaapRKzH1J9kJP953dy4LhED82_HRSQg_g9CVP38kOzFOjyMAS2j-9X5PghS1Td_lh3uOmmKuBUser0XPqNrg6nww6b_qOXCcuzYogQiy8Q8=w1570-h1128-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;br&gt;
PublishKafka_2_0のSETTINGSタブでfailureとsuccess両方をチェックする。&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/aBt1UkNeKZtzX067rRGYYfSFpME_tb7FWT0AsA1ZqWeYy4uU0-7WsA51zkOGG1i2BJLt4A9XyhqVxxoGCb9VORlT3oftm1c881ljeGa9I1NMiNPasjurssqcyipzQyBFrBabWNMH3iJiG8xzFfSiVz8K9BsTujeBBcAd5GQpLcM3CV8SHkHh-vwVVz-zFjUjuvZ0o1pSBu1SfZMNiTEyU7tsjAGiCnq0Y_hzzHrPojqSRXMtmNoGdthIvDJuaMmfOt64D2vaVTBPikptkmWyCM19jRA8efw9QRXHC2xy7a_uTQtySp1i4svTkbU9r5LaxOCPZvEryJ9Jq0__eghSeypP4RWaBoeGXnkHHyqvcX2KmpFGxnJV5sF6D1t30ktAS42P9_qSoWfVI64DzROyPI5QauR0S3ZIWZmi5RojqH5CagunNaF4J8rt5SP2qP48hOq1AsfmjWyUAaEgoSaS_udOEuOnvJ-KhRFXHbLul4-7ZaXNrgdMBNDmxFTpY4dtdW_ZNqWA0jNQ93yfeyoJGwuhNmXqu0Y18v0c9n6UMf7ALeQQ0VCF-8zablaAv43BH1RKM6pB-KhZt89ITqe8NqJ2qSCJ-22mLa4MLV7O7SGpmUUsO8qLZjLmJlVavpUoAx9CkUvxjgZANqTOXfMOKg9vCNlpHG0=w1578-h1138-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ConsumeKafka_2_0プロセッサを追加する&lt;br&gt;
Kafka Brokers: &lt;strong&gt;&lt;code&gt;hdp-srv1.demotest.com:6667,hdp-srv2.demotest.com:6667,hdp-srv3.demotest.com:6667&lt;/code&gt;&lt;/strong&gt;　を入力&lt;br&gt;
Topic Name:  &lt;strong&gt;sensor_data_user1&lt;/strong&gt;&lt;br&gt;
Group ID:  &lt;strong&gt;group1_user1&lt;/strong&gt;&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/VQ9ZR0dQzw-srmwyGgHolUOqdcEHlgd1Fc2SvrQBLIo0rSFkabDVqTlbD9yc3FEj9Zqbsyn1qMyPI3nmwCaSmY5lh8rW64e8tRvctmMpJ59Tu0cOFH1wiYVUbwNia9ufKa7sjvxtHU4tXEDY-5j53FGqElFYIDLm5xHSS0sKdY_IntL3l5Y01wgiyVip7Fd7mdgbQJG4FBvtAS8v4xKqOae08vGprIriFkjhXE-r6rpKKzbP9Sv3slIcoAHTrsQINo-x0WnuUQ_0UWXs6A8bx_qCeuL4A6-LQB_gUPqt_n0KJvkmfYgIsZM2ndMO8NY8Vz9pld22MFd-nKQmixvn5iEsGZTQEz6k_Sf4R9u_mwmSB8nWh4HGX0kFDXDKxv_tws0wrNbF2bONIwnLbKX-YjFurhdFkNNhj-QnVF0sQboHeCchWjpsAQsvxfMaZE_MKKdhF-vgpp2S-1QqWt1C9IEBmCLjfB2rj5qgTPDaeolmKnRetq9WOe1afRGkEikPSpqeHmxp-AeMgoKG1uIEQK8Ptp10O306czoCvn366NdK2-9kxnQM-eb97DVBU2r0UtwwcR02DmY_eJrleUSS9vT3uSZjgpiylY69c3u1K_HHN67KaexWJ8hW9aEQhKMb5N-_Hg52-NyyICaVVsE_3nTFWlEet-E=w1572-h1128-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MergeContentプロセッサを追加する&lt;br&gt;
Minimum Number of Entries: &lt;strong&gt;10&lt;/strong&gt;　に変更&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/BojIZFjnkEilWCyq_rzt5deYDCFLtCIsDzkWBM7GBVn4bpZknJe1u7W89x6VHCOrkYyKZkSt3NiBSNRHOEMFlUoTTKcN4If0qiF_mozUkXtXkNswlR-I6puK6Um1pgKIcC6o4HdeMVbKf2E6yBLHwqSdHQJ-JrzAuSNz2RZPzm6_WMk1kizfVLlVYUA02ZtlR11iYp2_CQkaFNPzQ7LeIZI-m82yAeEjeIAnmuHK4mXIkoJIiH74Qy5koMD8x05hTnGK7_4NeeelyskOaBV3L6-AV7vunAlhVP5loSaKFylQH0NzekNoL_p46IN0n0WPWr7-9vX7OReokjV6r9ig7bk_PsWnGrBOyUhKc86E3mf-8_4Zm9y8Yy9kmx1deW3KAjwJm7pTFoJIOMfeCxI7uAKDzkGx0cxpSOyr_K6FJskXrj2VUm-xDtatP4GMosXqE5LlMZSr6tRUtJdzjEUjXvGsE5Y__5Ex3UkvkjMhpQjsvxNMM2rdgVbYF4aPzEntviEIstGfrPUEyaMhNVwwJ_iy79Etu9LDUKjC2RTIAWgxvs6IlSzy0DwW3AROZKad7jcfc16-TNkbAw7kqHuMos9FqcUQocWz32JgguuUkkQh5YjmID5REnwUpA2kXs1O8ysrr76H72gm3KA12IYJS178kbW8w9k=w1574-h1128-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PutHDFSプロセッサを追加する&lt;br&gt;
Hadoop Configuration Resources:   &lt;strong&gt;/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml&lt;/strong&gt;&lt;br&gt;
Directory: &lt;strong&gt;/tmp/sensor_data/user1&lt;/strong&gt;&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/bET7tbjtvk-aLyL4SxqK-bLhkZycx2hxPI2c2QpmVM4E0ZfrU8CVMCTKgqvlNhMXj-Zq2BQEet9kLkXIOFN7O0bJ0WZdQ8CM7fpN_j40DyCSQ3XT3jzb1eWNlZoZUf1MSB6Q3LWm587RZWw9un2U5VvOj-3wkqAs9tSl9zWUI_tCsCXU_6S2G9bTIlw8F-Yy7WnQ-4SPYFcnjthUt0iKzusFwqeddVZ-_KHiNYJ5KXgLsDiAC1qKrPwSLzcIAp6O9Iui5OiWPg24uuLwo9ToexicdMwVkQN2sGs2chgZ0trFXGLcAKQgEGteguQMIKpxB2WEP5Y62iZld1FGsDJPqNQrbRZ1CDi2sM8guLJ2clftX5nHlr3SQ2627Y-4ZdCW3f3Ybc5my8CMudS6tMUN1wgO5823UL15mR9fQb4xZExnAY8lHAK8OlONsrDur-0wMfRS_fH2zJKJCwtr3wsecDFt530Txy1yKewgk1ebJuTTcRbi8D0NMRbO-uj8Hmk55-gOmVJ3zBikj5mcXk_wOatamjxxk5wM976xGUbh20bWcKlmeUH3nOd2d7rQnZlRdaYZlU3hKG4R6oIpXPk_9KdGpCojuez7ZNM1XWFyw6yM7ift35NjSBAzdy1iQwuLd4xD6PXBv_mNRDDDbrl7etrMW-P-F5s=w1572-h1134-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;br&gt;
SETTINGSタブでsuccessをチェックする&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/eI8WDb5bW5orwIHEoSEkwpjrgAn6HXV4kX1w91BOwpmI4fBdLUKPPi55SQzAzyf852NxfVYZGqb_XmBfzIOENW5cdi49MZtE-4vfbSWO6dwKz0yVmbW0Rupct0-Fko0X8vZ5Cs6FQynnsO3BO9ywMFurK3GT4G4lAyfnWFvjs-RMVb5OXqn35UOzVdjXKS5coGKl2VfOv5r7N7b9IPpUeYxEKn8KiggZMYWPrdVgPqidwPQhvHJz0uF39AhH43HKJ6g01teAKmAiDSt_rxJVQNTwwcZhCpzFS4tJUg4BcqZ2BRf8QsPVDjhAi937UgYQdULJzQDBJ-6-brWGrWjZz4b3EfsXV0lT9Ynb5m91yHM6rDfexW7qOrt_VcosLmsbcbBmZ8UapjDCSyNTeHTdDmkBLxQmu2EpkYSqTjpt1cBaOHlb0Kj9NEkm-ls4rliZMw1WZx4HfhLxEBPWdGrMbpa_Ht1E35J9Gwe8Kt_B0p-R65zp0CmVsyRBOLVUZuVjiOF5uZqBWSklDVPQs-aF-4SweEF6XtORB5ha-mGq9UUh0TChXYKATxdu6OwwkL7NP_qgquoAm9oruyFvBpUornoI3WMTXKlVh0TrMloGHPVUUYGlGBjWcgPOf67uUBamvNpJD-5mjWo4HeHUy0UV1Bjc7vh3u0s=w1572-h1132-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;最後にLogAttributeプロセッサを追加する&lt;br&gt;
PROPERTIESタブは既定のままで、SETTINGSタブでsuccessをチェックする&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/qdHr3m6dlP9LFa5bn64CwR9e20QrTPKM1LiMlDBCB8XxU1VFZ6C2wnAbdQALrFv8vjha2PsiUD6ZXMTt_pdbF75WtL0yQ_JX60BlSRxr9n-mm9VAjDPgyFyxkk_mOxJr7YjwrAbCiBWfXyd9QZoB34lRHic7_I8F7I4YQoTMkEgQelybHVppD8SwaD7iqTcJfrOP5VKY4y6nqszaTTAAnXAbPsCrNrTnOOhrMuYIQryY4873a_vwQPRAVdPkRe7-9laQ05KqvZJ192BA3P18DSf8QYiECH7Qn2LY3P4GEGoyiBSgBo2D4JWkTzxNFVWo6OrDZHBUD5h428F2o769VUF-TUzhln5WMm6UF-eGuKFTm-l2Mc_7MLRVjVQOQvWRNkO4itZDe912_JYWl2XFqPRezRxh8OiS-zJWZiku-PjMEO3TOHlyozkN7-gqIQvTWxiW0KQ1AUCcXu90I-3k2VRYMlBTZoErDtUzdp2dP_GY7PvogKiCxcKm2aYloeny8KQtblh5SiqClLo_Grf8iJNlM2kOygLMU7etWoghg4mSOiMrmPMdhY2IuA0_WmdIaFtZL0FNRw0Dr1RlXt6vdqznsSvLfz8P6ZEGhqF_RP0GYjq8Eq-EnCdRzz7dXsOKGKpe9YEgXuPLo5qNvSdIU1mIr18g9Bg=w1574-h1128-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;br&gt;
MergeContentのoriginal, failure, PutHDFSのfailureと繋ぐ&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;HDFS上のファイルの中身を見てみる&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/VSWrjwPmfgcMXVXNeKz1l9Uk_0QQqgdh9ggLKWu83TWzlc1EzSkIbGn5_t2b_w9F6xxZprbekld6-H4lodfm4k2tQo0utUEa5ApJJzhvxaIfOCx--ydkwQPHjY1TozKnM_T_NBVOipxpTfYSWFm9vTO3xC_wmNdA7vmSlfJfwhmAA5oRzP0I7M8A5fZh50HdsclvmII90vS3TzT9W3jJO32N9j5NlnTtD13PoC6L_C-lYhxKOtVYVUbchcZfZyCjaAnsIg81FY_AomebWugY9zlb7YtOQ5JzIr3fJa-flYVXbbAV60_GAnkPTvEdWBpyGi8EbDsIalsgQjc1FqwZs8JTKk6iLxTnoPQLCy6N7ZTd0XFXZWCxvMSVOJvmQMRM5UL_I9DIoYxUp_7hnc3bvcx5swobttDZBYT6MC0rRM4t8RXXl6CnR8zwZe9MEf_ofzIGMR0tFl7K0XViLYwNssf5OMOE2lfdGCwGkEQWOjPfzW-A3FjxrO08FR4NgdKqUInhD_FM9HOU9_0XiMIMJQQiloVjlHPKncdzRg7G133rkLYzrS2SNm4Pt9BWl7A0nIxPmpPFxAWga3HOdbdm7WkDpYPjgNiQncTri-zYyf_fS76n50MimN-qLTpoZJc5xZMjZXmKPSdx2Fmmva1hm_1mT0ANBHw=w1472-h532-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;５、nifiでセンサーデータをhiveテーブルに保存する&quot;&gt;５、NiFiでセンサーデータをHiveテーブルに保存する&lt;/h3&gt;
&lt;p&gt;ここでHive Streamingを使ってセンサーデータをリアルタイムにHiveテーブルに追加します。&lt;br&gt;
これを実現するには、Hiveテーブルがいくつか要件を満たす必要があります。&lt;br&gt;
詳細はこちらをご参照ください&lt;a href=&quot;https://cwiki.apache.org/confluence/display/Hive/Streaming+Data+Ingest#StreamingDataIngest-StreamingRequirements&quot;&gt;StreamingDataIngest-StreamingRequirements&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;１，ACIDサポートのため、hive-site.xmlに以下３つのパラメータを設定（HDP3.1ではすでに設定ずみ）
hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager 
hive.compactor.initiator.on = true 
hive.compactor.worker.threads &amp;gt; 0

２，テーブル作成時に以下を含むことが必要
STORED AS ORC
tblproperties(&quot;transactional&quot;=&quot;true&quot;)
CLUSTERED BY (cloumn-name) INTO &amp;lt;num&amp;gt; BUCKETS
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;下記の通りでテーブル(sensor_data_user1)を作成します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;CREATE TABLE sensor_data_user1(id int,time_str string, pressure double, temperature double, humidity double)
PARTITIONED BY(date_str string) 
CLUSTERED BY (id) INTO 5 BUCKETS 
STORED AS ORC 
tblproperties(&quot;transactional&quot; = &quot;true&quot;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この部分のデータフローは図の通りになります。&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/5g_Riel5ja0kFUTawn-PhaWcgQmpLLrE4L6kbRvJ5ODbHqHJG-lhu66ppHrYasQfrAZCKMke_AWxAQTsmPQH8eVIZOJs1HknzLB_OpowozWIV4Rnjdva-HpAbV70dfZf6_3UErPfbkKUnctIo11Admpy1V_pcEZREZ07902soIdvxHQVy27L6DY5puejygHuQ6INUj--GKecTD6Cx4HCso1K04TJqCc5IFV5F1K_-rdnaz3iWb3KCBbc5qzS6JcrfGk2SOrP-TSCDbOV8Ut3sHUD-g4Z7KduA6jkHgrlB3GnXhItq74f-kIs4vYza_OoSezQcJN6VncdYWL20xsUQNHaRc_2LsBmIhadU1xUdfvb9txgc678QYOGve3wWUX3l3yWkTz6zLul9VcRRza55ANCU84ZE5LQ2pPs0XNPrv9CXivJRd4RBBxubLNaNN-ELQySp8JSsHOoDPW94YpfXCEZIlDdG0H__gbg5SCib9xhIy0kxR6ChxkJm_O7F6-KP-xkz_45pG0jmu5aQhgWiFYyVipV7IVgnHtOaxfCMK5X8oYChPEZHx0fT5XiZqn7zLWeHgfXhhgoUiWow_Im64lHe8eB5qexbhw_dN_9IE7B6JlEuoDT1VENJIPlwWO2T8AaWet4HilSQjF2FbW3lShF8XnQv6Q=w1090-h1314-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;
&lt;p&gt;これからプロセッサを説明していきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;UpdateAttributeプロセッサを追加し、FromMinifi input portと接続する&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/XbMcKN8OR7qXlnQaBLuwKC8TBWSscy6BjLjbR1C5Y1BiC5MrQiDjaNNkwTTkZbqr-tpEYehlTHiwJ2jLYhsjmO7cGBwvA2G9Ns1jH-5jM93HtJUAW_V6U1T7cY0xvBInsBjH71fi4es39GRhpddxClQbqBdJGPjV3Y3lig7sXCdpRoFZf3m5OROOHKiEpsJpKigHTcpxpkSUv-iCjKHHoDX6gkXrFMV9vBhKJuipE5SuMX0qiYprzkx-keNRZrB3ccoRExL-UThCxJRWKPoV2Wy9p6TFwe5mLMVMeD6ZOF0qRnsANf7qHo_zx15vfdjrt2bi4S-YUe3PY3Rmb5zDVuldvz-vlvrHvsqxh6U-CVIkq_A1o4M3Ylbg5E8mLi8VWdQkwDsAn1jAAMEw51lVIvSIhBMA5PyP5sy4SvnN30YpgEMlMjDNG9vulGYsfTFg1CLK10M5GL_ps3kEeXE55LcsCSGYDZLCEnqv9cQpcvuoult2xixQuz6Mk8ZH0edrRLtQzfvHEsl8WTak7mC5PBK_sjnVmRWdXiJllRcmX_g9wqFHqfgt6Ydb8A5TCwMHC13L-MWhVBzwk2sRkOGv_uF1rZ2rV_gQdI01O-OZeOR4r3ZtZP7DUy-wEycjuq9w42c4-etTGqFUQYu7gfrgFDv5A5C8Quo=w590-h400-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/li&gt;
&lt;li&gt;UpdateAttributeのPROPERTIESタブで&lt;strong&gt;schema.name=sensor_data_schema1&lt;/strong&gt;を追加する&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/AfsjX7nWnbDy2kyGrFLE7l1l6u90E-DBAhdqvfri1oE2vVgUmFrBF7LES0uszeHTXHLwsANZo5ePqxl8qY1m1i77cCf6R7YqH36lMZrVdIk6ZBiBL3vHJYqeMRDDLb5OD10JYAdcjf1wdC0IgMkp2SwFBv1nVmBPpWFF6ARyQVs5TdGD1dgTwrUMKPXBjToITkEsZ8zXlS8F0C37Cj_TMsKKNLAvfkQ-VCQCBaMS_jtI9hg2i6uN6tsHE7TsWYrbgsETnuGArpPH6LbN_QJHA9tcg-YyGtAb5vVujyGeFeXDgPdD6V6e99QsXOJgrLZsoZ8t9rPGfFbJC7f3RCm1gp3fy3bQRITbJhSDmxqBZBnrTllY_JsGW4p6AovfLMN0VK795XTrVOgQcmDFhQmHifOxdw_m7E2WzNbFYispof2GvDhcRBkuD7SLFDXW2DV_Lfyn-0FbazH4w9rtkisFF53KF35WKagLrweC5A05aInU2q6jl5MNOR1y4j5BRZlt20AzeocDqnH3RJ8PhaZ5i74H6k7UHZVg_V-rQLObYn4G60w3_SfmClnbr_Ke_ATXXEZc2AnaKNwzbC1JPXLmIZPCy4UTPMMIjo-VF1WURGz83BQfpQRiiaUu-eVQdiYOO7PuHo1_7i_cmBuiwhjlG-FiwEkV8c8=w1576-h1116-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/li&gt;
&lt;li&gt;ConvertRecordプロセッサを追加する。CSVをAvroに変換&lt;br&gt;
Record Reader:  &lt;strong&gt;CSVReader&lt;/strong&gt;を選択&lt;br&gt;
Record Writer:  &lt;strong&gt;AvroRecordSetWriter&lt;/strong&gt;を選択&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/OZH4tp7zJL68cCu4EMrvgDZtbCKP-GoBcyQ8t3Z-vOVcXybvAelZM3q51RS4l6C8nhyEHeCRlqhRRbXTJLiblk_iKHHn3fNu2WVJRDG_nPSbYBuYc22OhtzeT-5kBUbRWILOxhohJAYzV9NJiZTKTyWDEBJT5QkWA1Ejhpr9kdA_v7-X-NZWOi3AAFc6teOeaPsLX6HlSz--vlz9FZUFY2HGzQTDA1q8GGN5LRP2oNXy699yHCBZ6_T8LgHUPKV9yDgWE4p2a9RqhUpGfMuvj4rwvBs2AuHHjeIcptqzgkEEjgKEq6vU2bsPGo_2VjU7rq5SAruw88N4jOpZ6l_MGaJIfrLkppmfVtsSmKl9UTRC0eGzznnOIjRRrUoQ8t8n-Y_kOiN-KEwB8Wf0BN80M6UInn8PBVZMxn0dVgiisa900k6LqJXjH3blnDzOkVgNaVHZgD0B-dm4hemt30k7mLgoJ_OQxX7rZxiZYDEyCfG1xRXn-qsN495D2ZVwh2vczftGUodxXaq66i3f5J11IGHphQtKZ2FaqpYS1eCM5biYKS6L0sk6eSR8_3NZxpXFHriGYjqFnyAQtdmqYxW4K2RQh5QtCdYz7SMSq5K6o4YfIUTWzssyN0cag1wnXlx_bH2cYp-zYYSuWuAW83Di-osWaWyrE-8=w1576-h1112-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;br&gt;
CSVReaderの→をクリックする。&lt;br&gt;
Controller ServicesタブでAvroRecordSetWriterとCSVReaderが追加される。&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/P50QeHxsfutY4Z-6282MHDAamh4-GDHe94QtPlPjrqJVo3Yp2_Oym7HgtQL_R7Uzf7ofYKPP8jbm03qgOFt099IvbWVULoB8ba_AkG-7cg5pfRQQE7Pdf26Rs2Vud5u2m4vcTBMMalyf05c175u_nxa0e5axZuPeOMQ2iumxgmBL6Igqccwbeh9coT5___Vjqmu8rx66aS-6INSvHyISaRCts4OmXVec58PwZpCoC2WCSjVC3-PYw3n9NFlmfNZKcfHg0xAf2J7JKHwwkdLzpoFC7lIc6njX_SJc-gME1ZjW_BABNs2fe9H0dOPYTKc8OiO3EjuCnbMeRPhzVziMwXR1cO4p9ghKi4S8nSJeoUhJW163XEl2b9EILeepZ-dD20SeOF3cUygihkV3Eo9pUd65sSE60dg4Hiu60Q0xJdjk9yDVpgnC61474kBibQFZJvAaA5fTfb2xR78rILqDMXqQ5IqvfGQJ1KTuYRWRjJ2y69VT-oyfCpPU_eq4TO52-YHriYLmWWTcR-ptKGWddSs3myZRE1SzWy1h08NtqZSN_HeQ0SRq5Wtt_YrJFWfznzHDgzO99zndu8Zw1lFzsFMq3S9T7oKadzRsofxc1FVE-oQjyFPrYDBp5yl72SoWs9OTB_kQo098onghL8fJh5TGMuFUpC4=w2760-h528-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;br&gt;
⚙をクリックする。&lt;br&gt;
Schema Access Strategy: &lt;strong&gt;Use ‘Schema Name’ Property&lt;/strong&gt;を選択&lt;br&gt;
Schema Registryで &lt;strong&gt;Create new service…&lt;/strong&gt; を選択する&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/1Q35Peln3yfsVB0IJabhcWBKybL-OZyWrKcu0-rZxqHXO6Ms1BubZv-g-Ubgzu6-_fUHBXcEUxK_mWOXv_GKzIcVSLklL2rFpbGkX8-nlahXUEtUeMcFdvFFZcLAO818eHNRnuoDlI2hd2XL-YEsT9xQo_M6ndyht_kMa-7EtFKRiomhqZ44E6WpZu4EgUW2JxfFqrY77JtDMPclSDQMmHc07GZYA3LRwVJwhQV5SBZqYOs2kUGAGdcND3ExetdtDehIqYAxUysAHMcyGMqZtyIGUKOK3fteXQcDst9gwFAuqicpHq9jXonKcqc3RM3y0tPug4hYkFqI2fBw2HDp_qdjKBsJkanMtEhOk2hNfSxoze47qSdx6vZM93syycB6QUj7GYCb03T6kaN_eJ5Zk_0AzfCL6v-HeEbwN7ymOsMY62rxZYcopBVGxH4XzUS4vPM23AKUPEthCRNVcTneYENMkN3rJY-ZsUIvPpTKZ5CEo1Gngjo5GcCrDboPVU5XtZBKuQhTh-ejcMEZou9I9MFIiP-0oghosQpIreiWE8p7svVDglepODzdkcH9T2nK_fSz5g7rQRr1G_SNurduajEhygvrQapyIlhj6t9gomhmtWLfHMYc6MSYd6nR9EoWBGKP1kZ-wU-riIxRNLVauBfiIVWfXL0=w1574-h1114-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;br&gt;
&lt;strong&gt;AvroSchemaRegistry…&lt;/strong&gt; を選択してCreateをクリックする&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/4VgierINRs0NDpjq5bE8BGPFAy8JYAAine-gNXkMQuz_2jzGwgHUBFDRWSaTJE-tdCmd4ZX2sV31LwVCrbmwtRFkE7cc79GD3k_8JlcLGKD1tnc1ZZzf6uwJHwP6JvQ3-UV2ecZGyEm0bU6BWpNi5v_hgVFbhq8e5_kycI0qed_vlmjQB1uBT1nQu1lbu7yHXcldlC2Q08dMDq8_RsKFxT02_OiXuBlOmtu6jipWLyKzVhtBK0dgBiJARJshHSV6lzcdjRkVQCtgxWBvoE2BzcB0-4XD7P48HEm43OEn_HYj_VdJVkInm3O-q58U2lPlb2WBHRC7Dy9WyA8ewup43dC71oyHTHxDKHHxuGKcNuLc6_v2xu21aoNM4_YtJ9Y8D2YAvVWTtgP1g6lQmBgOgNrJvCsiLwZSrl7_XyEWcFAAU1DLjONHl4V0ZqWy82opnTGaefPijt2Fp7KNxNqSGLfCKagLmYoUnfsBlQzfoFQ5k7MJqIZoa-0GtqfjUix9KGjVwhlEflerr_qsFOLSauw6Zq84xUbJlaM1qS2D7wnt-TjW-yhHa35EN9WYuT8t-rK-xdvZvQMkpv2cCLfvRCu3brYAzSLnlY6hpPbEjm-MDY8z4C50LJ8AsiAlOn1UVyRVBNH64jUrPZUOep0cUSJkNbtVRnM=w926-h836-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;br&gt;
Schema Registryで &lt;strong&gt;AvroSchemaRegistry&lt;/strong&gt;が表示される。→をクリックする。Save changes before going to Controller Service?が表示され、Yesクリックする&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/mpvpIbTnbbBjNgy3bDR8Kdcs8UHDA5-tSPK4Pm5QzmbLf4mF8-UAdQJJUnRhJFzuUQL-CUQVGzkiQ5vQ30FHlXK69J94BoW_eDsT_bA7Z03yyr_luh8IPTUbDscpsrRi07hSiSgz_3QMd4bR7HU9ZUyBQXNk6rEB-m75ewblj053l8Dw4SHBwYI1KfQjaNnf5tNvrzTSMCinjqaa6vIPpON43bBycriaFs-In1Df1wr08fwPRB7ZDLyGwCu8ZXyu4PLN9bYppTQuBCSU8iPzo4PWkeDWhU5p_k84lRpoCQUpRzSgbv4QT9AVvYNrK9yrGh1S7CzyAZ1xACKiZS6esWk1p03BEI70b2h_6J3JJBj8V5SeqLLlJMwOqHQWMm3FFMn8dw3FjlJc7_wtPF98rBZoKn5I_jGU16cABP2qM_tlTCtfycCmD5HB-mhUmeH7OP-Ebbqq4FKZxWX-mmwRIgv3pQLj0M3OPtDxt_ylZq6A8Jm7fGgtAPyMeopIMes4IKkh8OiFr3MrQzLLb7UEhCLg0-lbr1y2zaHaGApvDDzBk9Hy8b4msYlKOHXG22PhqFL_rzpTNpUs6V_YrJQDHVTRzcnKXrsnhh-_3EIEZk_4ZFmMe_wGHM2hiYlT0erXRhnRjWWqedz3cWWHQ00GrtUJgiT04Rs=w1572-h1122-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;br&gt;
Controller ServicesタブでAvoSchemaRegistryが追加される&lt;br&gt;
⚙をクリックする&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/YDBmPscpeN_bmSH1q6mrtuPiJEu9mQ8bCChJ0kMnCHs9hbuWbq12iCjRetk60UJ8cHq61jUI4XkhjOp_Z7UVQu6zMClVok6W_dmrskKN7nEujcQIa51-ihqWAm1E2fN2XVj8OFMbcHHKvKazfR5bhDUtA9Em6GNyYIMyaQwVSmuBxUKgP6KrhIZJGkp1CaAv6YSZWKTBTijp9tHwGdbXzA7TctTA18PPpalyNLAqsG8U6EKdD_CfOqlCNxhoUX857FpnG5tk51aI4pRyEo14lscKZO9i9-8KdHanH7IkFnkmt_9i1X6loz3m3aYb2ceZJUP-RoOu3i5iIRPDHTEQOYWA1s_kKsW1acEnQDOvnMuae0DqIIq1L1b37LxDrp-jBQoEsWhtkr_T-hjCXhLGh_mZ0Xt3MlUJ4KqtamvWVkol2Y5zKg4SyI9hovL5XBDF1ePyROGNGY-l_Qbdo8irn2UBBV9GWD45XTVKcU209xErpuI9_jQjUFY6He93368PiWsWXhJwo0nOHnUQxCwQbRod0ws6slfNSC0huPsHlbuTZ38xjnv6IrDUZrbV_j71ONKLX_mTucAar7acfrBYw9g6eAwnjoerXip_Ulzo0qD4vEV69zNOY-UGeKJyLzKc5dALcDLq2YBNjxj3rX3z9FTcpG4M0HU=w2746-h532-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;br&gt;
Propertiesタブでプロパティ &lt;strong&gt;sensor_data_schema1&lt;/strong&gt;を追加する&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/23799528-d62d-e2b6-6aea-7bf9a06b69bc.png&quot; alt=&quot;image.png&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Avroスキーマは下記の通り&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	{
	     &quot;type&quot;: &quot;record&quot;,
	     &quot;namespace&quot;: &quot;sensor_data_schema1&quot;,
	     &quot;name&quot;: &quot;sensor_data_schema1&quot;,
	     &quot;fields&quot;: [
           { &quot;name&quot;: &quot;id&quot;, &quot;type&quot;: &quot;int&quot; },
	       { &quot;name&quot;: &quot;date_str&quot;, &quot;type&quot;: &quot;string&quot; },
	       { &quot;name&quot;: &quot;time_str&quot;, &quot;type&quot;: &quot;string&quot; },
	       { &quot;name&quot;: &quot;pressure&quot;, &quot;type&quot;: &quot;double&quot; },
	       { &quot;name&quot;: &quot;temperature&quot;, &quot;type&quot;: &quot;double&quot; },
	       { &quot;name&quot;: &quot;humidity&quot;, &quot;type&quot;: &quot;double&quot; }
	     ]
	} 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;終わったら、CSVReaderがInvalid、AvroSchemaRegistryがDisabledの状態。&lt;br&gt;
赤枠のアイコンをクリックしてAvroSchemaRegistryを有効にする（Enable→Closeをクリックする）。&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/FO8Mq88G-5lcRMOsugad87x_RUQw4GJ77Q9k39ZIesTTVWOP3dCJn2o6hCVePaxcV1VQW8V5Inri72eH5YTB1OlWQKC4doJNVPZfGt6-ut2Qc05MJOYSeVOYuiFV-X90H7cwastngZXnD472qsomTD1xsrlrac-EoVGyFs738aMTAXNXe8BAUCmWN5whQB0wlOP6xPgdNdjPYhc6UzTXf8HM3eIxUd5gGKl0HoahmUkO88S43Bm_ih8tQgly2TS-wCPpFx9y5E5WLYae7Mj0pyref_rSf_dj054FRhiboLJ0WrpmBdvw4B_M3AsilWdF4oAGyMFgnAEIEnCG1JCowEu9Lda_4QndQ_fGbKHHf3oitKQJa_qhhsYBB3rFBlAnxkzeYUoH_BahQBzdONgTECd7KagtoZiIRnLaNXOQUg0zp7Q3_JoBXMiiUVml_W1LgxnmWUVW9oeaz9ZjrhUfCenAZQ0rrc5WEcR7xR9xgxfRLzi0M1NgFNjgFVza6FaXOJhzBwEoQbJDXx5WarkE3RuCLoPh9Mpi1PRfTbSqWizbabVYvocnRDE8VixQRfGF74BGKu8uCliJO4vZvEJUM6jE2oduHSqqpaQRih-J-A4Gh3BEyUp3c-b7EammtnrgzJZwNtkJCRW8g8Zxq4abv92rEwo6-pE=w2756-h526-no&quot; alt=&quot;&quot;&gt;CSVReaderも有効にする&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/avXEmOECbywZmeqObwpiPxrQNB46SSOkLAy3-4w-bGDJyj3KhrPeUiV8BoCHddLNdR6a32Kki-pa10l4ZhkygfzPGMYZz4TVUIW_t60GEeqEBtAnVr0KdBjQ5WBDRMslkhTVVDnqOwaWAFJl2Nce9oUhudEEx9ojcvEGLDDcyg74tdoINedBxz16TPXCaRh_U2KvECjTiwegrMH98ujSR7GFtYSoFnObZ6qJnaK9eRvColPVnHcZoRYIboWraIrWftcpy6prb3DDZVSpv4wOkGC4FTjvUn813VV5oQ9uZzp6-iHkXY937JEyA7tiOxNQ90x0VF0T-XNkTgakodWMeLHfq6C42M6Ejhp2FhroaFDILW_1CTTebeSRDjKbpNorDmsh8eU73gVe9OyHR8O1xMFSvhKkltxdnojzEQj5grWQLRsHMDULX_O4_svO-zlk6tDpfbw47o65KogFz72uNbj47qzH5o24x0UQo2M9YEN-S4nO-bE2PpZuUQKD8BnyLAcDnveUE6artpnJtqqWEcZR0IAUOv-pZam3N6KekOddU0nyigvHu8ZrzTANmgPg8NMRmLAbiQCFPQ1bKmT98P5Qo9uYTO_xqHFalTaI7AaSsIKNo9iHiS3bxmPwbXdqFizsDslFGi38WR4n3B-IXDSrOR-qeOo=w2754-h540-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;br&gt;
最後にAvroRecordSetWriterも既定のままで有効にする&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/Bf665rUIHo1QYbjKJquh7ljgdwTBSg2yYZAkojiGBF8V4WroD8-LmLaNjzlyvCgb-zwlms0rViONGXX9aZThoI73GlGYw8aoEsqAMUVXwG1loOhLFBAhcDiVj3M_LWW2N9P3P4oAXRrDCGydu7R4wgSOWKNsu8imUYFjTuu4YWjtthTP-_iRcY1DGNH5KquO2NHDsiTlEdZczsuM2ytINswDGMjzxXmoJsOoAcyyjMgeP5KB4IMslCfIyLg7ULRY8BjqlTKy_VUycd7-OeRG8JYk0ct6lLJNhOLcGYkx_jqOcTXthYLKpXhG2rg3bwKZ-GoFvG1na27IBD5_VMqV2LqnKbkWlsaMdoVvzlN0JVj97n0iZmyyc326-zw5zYUaOeFWcMWAML8q_rfY1gLIl1wD4cnosnuHqWoN4nvYdeTljGjp1n5AZWHVx9qAvSemVr6xjtLDkb3Osal7FHfL-joDJ4_WIpcx4q4Q4mTvW81UclaEl9BeYoxAtHfQgsaN199CZOV5_kzGJgBpHZDkDqIsq7dZynp5546daS6pN-BGj0cOsdVexRyN9x2ugTX6sqyV63tJ-_XpVevrzhEDjctVh_IvxO5yNEZ0KIjjQtVCoteF_w-XZMg-vvwud3qNFHq1hqXUCJLcUVemzxq0bRKuGqqnfh8=w2742-h542-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;br&gt;
ConvertRecordのfailureをLogAttributeに繋ぐ&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PutHive3Streamingプロセッサを追加する&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/90nuOovXcSqvWmdtt7FvkUG_cE4oLBjudyk1q8epkLE5SQcL_7uFl5VogjtZZY3HCvKH8DXCizt4MOB8YBDd4QnZELAyn8mykhoRj-QV6YXKHVtYKMtqq2Jp2OvF2n-3jjuq9Npehx2mdr85S7fkJ1UACbSOpMayujsVqAq4RbuWuaNxsbiMGLLUFAtbzCczfu0tPwbvNRaDiIfXwbmDK6j6zSSLjuiCOospeqVT0xsiYtAsHXhpWb6OI2rTRsQ-Xu1M8NB0WfYxTJ46XuwdQo-sw9D6uFX1oIDpQ_ea-T_GYD5Fc7zwuGE30sxOqK6Jn5dMo3raynA06Bzb2t_iDUcrFnH9dLre15ysjegreL1O6GrFjAIBhh8XC_qPQK24VgEiOFCU_PWBSeCDf5atWmwEUxVM4H_lT4qqv32O_1YPWHy2Ob91TsNRYPxizvcJicaowpcGO2ttLiV-3qJCuO5wcqER11LGOv_AdGy1dmnpfDXGuDSywMJS-w2sQoBaKbWhWSVDRgFtyChk7y1rf9RYYVvt2ODKcGV1Wh1oe3eUVncNoROHjtup4KX4MlhtMQ5NpcUxUrtplbKGqVpZgbaPC1ecW9lhdAqQFPGIzDIcnIgEJWD6ryR_NNp7Sh-BQsNzTpPRyGXvuBcEkTkLkMLiSPmb378=w1024-h882-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;br&gt;
PutHive3StreamingのPropertiesタブで以下の値を設定する&lt;br&gt;
Record Reader:  &lt;strong&gt;AvroReader&lt;/strong&gt;を選択&lt;br&gt;
Hive Metastore URL: &lt;strong&gt;thrift://hdp-srv3.demotest.com:9083&lt;/strong&gt;を入力&lt;br&gt;
Hive Configuration Resources: &lt;strong&gt;/etc/hive/conf/hive-site.xml,/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml&lt;/strong&gt;を入力&lt;br&gt;
Database Name: &lt;strong&gt;default&lt;/strong&gt;を入力&lt;br&gt;
Table Name: &lt;strong&gt;sensor_data_user1&lt;/strong&gt;を入力&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/HGjqHaflt9dtv-Z8aPoY4WuX_r6MoRMiNx2prtp6EFPDeeVR2Fac6kAbC8xTZ9AbJHuPUmVa9wwLqa4IJ__pb1Czj1qvvkNdGvBad9Er4TfhAKJCvAgj5ILJwecvWQQFxeW57ZAUmqkjNhT5b2C83hoDkD3vFGnpjA5-HpnOZAK9CsZkfpmpCDD56K1wkb1gA5GRf-tZ3TESm44iXK7gpka93cO-8MQrWHvGjrggC8gb--gdlv9TU-y7uXL5edpQKyWLngEV2DtsksbTu8WQJrFa-WAkRPMi3dz3gq3AxcP961w9Yv8IcK2NMQBSIzwL1SG747ecSj3jjC2_BYOmYhUXTCnckaM-MbZiCR_TYszu53v4z3c-NbchLbmmOA_cJeijeCJCbIoy_qdYJEfcv_WVcdhE21l1Fte-a84QdyzePwTV349yAlEVYiH9rBoVGPLyRpG94eb4OjoTPKEk3D0L_4nv8h0ZFlLmq1-kqth_qYGyssW6-rT6YD9TMYOri4-ZwZ92s5DTbUeEhRnHwD3hDR8bYTk5hiuMCNgdjiHejed6lQsiLmtlSaQ_DdMR9KFXEP7dLgLyB-BVZhEAu13Pfjc54_qH6_i1sSlv3P5yFPt3FIdB9HU4PIcaDp9DiGfZTNZzTp4xEWzfGbCOOCBehP9Ryr8=w1572-h1112-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;br&gt;
Record Readerの→をクリックし、AvroReaderを有効にする（Enable→Close）&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/iD9M5l8ewyqVmhVAqs_QZgjAhyUxGCGaSFZ1qGrI1Vt_RXWUoRD-3O1uHL7fAMOsGa1bORC_7NYGzxpuRlO7rRTta0bhjYobnhsM00nDJNEnyv97I2Nj6sayjzBF1JBbVVMM0gqz0Rgix9osKs4WrdxieipkMlK3cAnTg7yOzM7kpdYklws60OOa2zzct-Xo4o3x4hdoo4sYcwqOQLwhOOW6pGuu0ho5DaBRT_j19B06WCv9t6kZO4hZhiY5vRO83C4YdRtP4072dHXyMIO7ekLLL6NNMfGbU9rPWP4Jm5_QHnjbKUuaEnltBTVbKSiAOsWEMadeOilSAYVjuwk6rYnGGes1F0vBISn7TOiyQDBkCi7c2WcOy2StjwOR8nSX3k_fRS0yp8IbUPxWfe2B5NVwYI0gbJHAHji0F0nv3zs39BhEun8wn0iSAX4JVjRFVaxqBsEwUKOrfF6jJQF7uVSfPttJYGMtuUNPemCGvwijEaluailIoJv03ASVzxz8IRQjc6-iSpi0kSeTwDRJpJG1-vAYcTA41iIgh17jwo1LNZe4mfH7XF9Ov1YEx0hvm63-vgHp1SHiJWQ_2cB8BLumi05FH2XMc4RYDPypXkW1tOpIPvNg-GzoGKjS8SdFdwiY8MeWIBMtIFlcG9PonqAWP8iJMA0=w2742-h572-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;br&gt;
PutHive3StreamingのSettingsタブでsuccessをチェックする&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/9VSFKI8mrb2uPiaDf0JBTciU7o8akV-qxxlzKFZFUhfo0tBR-CmStW8aorKe3TPcLx_WyJ-1xobWStd8J50XX4lYR7vOLm63ywgV2z_2uela0d3Wkju6Cat8K49RuaTCUMMPGSatBoZAKLSw9p7fcJBQt74rvi-5Yg58ClBqUmhadHS1cWZCskr0Acc-zSAbf_NgAoPoX7mIvGk0owFbIdMP_LZ8gBbxXifnQ3Rka6TEQompVaHLURkMFnV2JK1RZyTg1Bbx7FEs3vdv6Wq72iTSbkPLA4gcQT5LLRkBmaTnjLaRBKp8nE6osHGPkMuj458EFM9oekPu7ZxElYgButcv7qxXYRkDLfC_2TluSuJwjzI6XgJO9IWeulx612gn-tk3c6pOQG0tgUTs2KAdu5b5L0QcaFjtdRmm6SEsOnXvyCiN-RaSWcsKHiAdyTj9NfkkdK5vrJ2Sk_zyE0-UB1mGipLD7Chi1P2yTENPqueH02tuefBDIQLz71OouuGSAaKwYFOHxtQhQGN7UXjC4WPJiNuAAOz8sAt2JEfkE7k964z61YqH4Otm2rYvUqdp-YgaRoHYXLt8x-kSq01LDlXbqhxmwxaW8YNvZqJVprKFg7rJJKHlFHjR6Gf_7EEaRojTWNVSR3yFDDQL5O-sugv4KzoCzPY=w1580-h1118-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/li&gt;
&lt;li&gt;PutHive3StreamingのfaiureとretryをLogAttributeに接続する&lt;/li&gt;
&lt;li&gt;Zeppelinでクエリを実行して確認&lt;br&gt;
時間軸で温度の変化を表しています。&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/BcNXY8xeys7mV3G9n8Z1w2mGg8hE2XI4L-RFZRg8ZWwKkbTDpzzZBmtnZzvvDfWxV6degZgzuh4aBDUCRmUcvET3LFY5QxiXwSjyC1vQh_oCCOIxBtbFwsSu9ievA_meC-L9ICZE1p0jCLJOkwFXJr5Db3xuqPzSvkPCIF1EYzr4upH1nh9i1qsfWcI_e_XNsMtnQGw2pwvXkiC8I6Ni8YeTsMFOi9Q4GpWhTq5rUnnuT6uESE3U46UHLd-g-pjDuCZY0khNBW3AIfH8E3fhMoedK_m0k1swJOb8SO5fz9RGdR1WTvqi8muSKroyzfs99xNj_lcj7dFAvKy0AssGTivMFS5vDNpOm_ojenDml1olKJDjO1lgPtjA-po1MvT2UG-TbZ6SuE_1w5TtyKJ0wqYI-cCen3HMhzm_WLjnBtuovc-Vy4747uoGse5cvS9WQ_Zh4cHO_V1V4VApv9AOnaQPKGyr1HFMCAQ5vr5TH-ALPw2t5QSiciuBrdSx5G7fkEz-4PvejNf9C0LwrU8Q0cUcvQM4Vv0XMkJRX70kDk5AsvlqvPSIsLOKYPkUGzRVo9ndPHy_loCurS4XZHC2NJIQHKQc3E6adrjX2QlxsomDG0LsUkx-lSq9OAli5vEE6AqFUKg_VbTHO9qYESY_Ik4N4tsKc78=w2810-h770-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;６、nifiでデータを加工し、温度が閾値を超えたら、slackアラート通知する&quot;&gt;６、NiFiでデータを加工し、温度が閾値を超えたら、Slackアラート通知する&lt;/h3&gt;
&lt;p&gt;CSV形式のデータ「1,2019-06-04,23:59:51,1011.54,&lt;strong&gt;24.86&lt;/strong&gt;,50.67」から温度を取得して、閾値（ここでは30度）を超えたらSlackにアラート通知します。&lt;br&gt;
全体のデータフロー&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/NEzb40Obw3RFdpwVLFMLa1mwOLw3QxQ6k78B74CEnJIuk3jv84qqEZREvntulyJoemv6pDalcm9vC8GoNgKActLIcrBH7OGDddyuVXjwqSDGxAg0b3vcNse9_kcslzlBqOWM28Ggh9Hr4iiXMTe5eL4v3GsDeOnC78UzFW2ljI6YggMR3ntvmL5_jrRc8pHmGyxqdRB0NGnaCDPt5tWGD43kE0IL6g_T_bLwFO4z1xqYywhwvovsTCBWu5QrFGoEv452sP54boLh_Eq7HEcFZFF-R18Z1H-qiK0FUIs4C2gxB-9Vcifff2v9tOm3GBM4LBEq0uGEzJjHwlTcDoNrm7vG6Qn897iQWlcULK1L7nwhBScXta-OYRLlfTDG-0rNBziIu2VYPCK7xwPlPPCKpR27HQ4r_6OjwFVro18C8B3KSGZRFXu3zvLkQxIV7orXIJHRG_benxtVxSA8e5KWbX-gGrVljX6Fhbj5c6BWfDdGV0U8X1xo8wEuGO_uUA1fCGi6pINMk7svP5N-5Id38xhdmqd4NELiC0MWU2IgiEPAl3wh9dQicKqeRuVDCgG2JNMUPyNGTL_mUKpdFTj-Wm2NUa4Fcw01-AHaz5YqFkQS6b_U2_7SFKfpPoOhLSikD_qyY6fQvr9vwVYo8_qzF1vDlN3ssOk=w538-h1324-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ExtractTextプロセッサを追加する&lt;br&gt;
Propertiesタブで&lt;strong&gt;field&lt;/strong&gt;プロパティを追加、値を(.*),(.*),(.*),(.*),(.*),(.*)に設定&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/b29d69a5-1fcd-b5c8-297a-b7b75f0b68f7.png&quot; alt=&quot;image.png&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Settingsタブでunmatchedをチェックする&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/Zl3bf7Xg6io-H1yefg3hvodZxvayge-pPitGZ4E_uZIEzDl7S8GrIi3Tmfh4Xv-F7uigQKBLKCZr-kq4taqdjzPab7PxPlFJam35WOwJDEcYJhY03sikNj4tz8MBw0nR4UVNaUeN-i_aiMyXQ5GxohfjoIhR1eJmkRnDGCbk0iywIMRxVPpbCNYbGX9vK77aIfVjLtczzM4prBHDC_EvSX01GkEJHCMAv05ypSEKGReeA7Pp7X5-oQ_OUWaSKwKgEtYqhVIGq0G3mEPZxPsu22m0FWRLxOU-unJAqeko9UYaeERrpvMNvILqLrOoEo5m57Z9aOEmnGsCim-cOqKsnBed3d6Rp5xCzYh-zXHfJegJDx_ymqYNHSeBuNi6atv_6v6Dy0JuyxyhhC9FpEkWVAYQBSZzspUzndE8LoYDE0Gp1MsXo3IS84k8bAa0nmuJLsAy7PKFQefGNCL8lHag6c-ENaBdth5ylLU_hUqVWxyuiwy130PafubOy8FL61xLAHFC5XCJ4a3sfQJc0QvekM7OEzkvGt9sq8Prp0LckXQ1MbhDQDUhWO1jOhKLIq_H7gMBIMQGr4AdXFXWxsQW6jvUwOfTyuEDtXXNf9UFZvk0tLXshHGEBgtqMY9u3R2TZouCQFNr7Z9tJxJAdd_kWcG7_bxDh2U=w1574-h1120-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RouteOnAttributeプロセッサを追加する&lt;br&gt;
Propertiesタブで&lt;strong&gt;high&lt;/strong&gt;プロパティを追加、値を${field.5:gt(40)}　に設定する&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/550ff115-eb7f-e9e9-9873-8d2d18f16643.png&quot; alt=&quot;image.png&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Settingsタブでunmatchedをチェックする&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/LXgCNl1dbnlIZgavlatO07_Yy4U3O9Ru3lBV96vGS1hsSGnGsSnH3XkVSGKKGIuimTtleRtNYhUhSrcakBLV1cxRWZFnO3JX0rDrbTSgI-tuJBPUIwrMIZTPQq-ZuJcT8XWAVKqblCz4btIArv4_Ud-UsfUDvfy_SIzfH_wtpEkO-TlLSkISkdwSlqx58wruwgKJsRPFIPX-l1g7XmT3zkaxrGumuxfkYWRHar7nr45Obvbmtgy8zk07cdV5NqbPxtfd8h4t5yLBrbsNwdDVwmgJvSlIcRBYVTkM9jz1hzbTrxuVonaCA0nryxj9fyWFcsJ9tnAX8-sgHIDlsIecBqThBH-hOHXFQiM946fD6AHvCeMkDslIdmRYKwOUajURA7FKZGmSXoB0FeZYc89ZvVTNDkabgAM1sRerm7hbH3sW9GBu5hkwo7Dq1Tr5kdjU33-0X5nXNEquOAKSu6SkRKREyXd41c2ZgyXfNBRh_HwfzMCijzvc4Zip244UOcq1t-LhTHXoWt9orBqXKWCgkxh7D3gGuOtPlwmBwEA2jYtm0pXCxTLfBc402qUjMLFf6xpUp6ZaUWemdy2Vx_4y0oH2CppTT07Zo7oTJMGQR59dUO52aJ3Gwz4VOMHjkuYaxUwbkaSTNyVcE5I5hATKmiFdzDt-FKk=w1572-h1120-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PutSlackプロセッサを追加する&lt;br&gt;
Propertiesタブで以下のプロパティを設定する&lt;br&gt;
Webhook URL: &lt;a href=&quot;https://hooks.slack.com/services/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&quot;&gt;https://hooks.slack.com/services/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&lt;/a&gt;&lt;br&gt;
Webhook Text:  Temperature is ${field.5}! Too hort!!&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/21b65a53-efb3-48ab-f809-fe7b2637a62e.png&quot; alt=&quot;image.png&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Settingsタブでsuccessをチェックする&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/uBhyVr36kRRbZOTz_pYpImzLYwaFqAkGa4v0gBFeWm7W1x_YQLcdOlbfZjkTUYLOJJy8rcdDAyyWEWuGv82gdn2BLobaGupUpiE0qGz_1-Q3B74YgGOD_tuOrTQ4qQ1Y6F87IfJNtkkMh2V1iM2z12tnIXDb0V7ofaXjfjq7pLvRzroVOH7Z3im_rOJcpwsI_TY3pCIyyOhC25lDpA_z8soLWODKDiFw1c3-Lq5VZOKkV7fzLiiVFih4_m0HinM8v5Pbc6w0PvXa5hzeM4wSEqEXhFEaEVkaR2q7JkMYQ0voVpQw1jJTdNYBhz3_HT7UCbJh9qwgEOS6pFD4F88PUdvVeMUq-O9pcH33cUmYj0tTR9X1NielyR3nSfkrsXzMLMGibzKNGvhjv63NNHZ8N7C3tAvBhvTtMDPoKy1O1s_TSS9QVIRYS6HFIfB4yr8TC8okP4CryGdq_d60iOVJNOxxHD2coERLrUjHup3HLoKKr6yvU9pV338gKZsd_Z2PPAQ75EA6MnoXsgJ_B0Y1SjudseVwO7-33pCcnEN2ffTamukLU7i5DXQYBSGT_7bG1iLX9Pvf1-0haoUrAcsmmhun-cQbHQbHFDBzc-VwMC4GoiKyaw4Un-YK042Yj85MnVds3MD6IkP_3tsZZ88GOHG5bWSHFYA=w1580-h1118-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PutSlackのfailureをLogAttributeに接続する&lt;/li&gt;
&lt;li&gt;Slackメッセージ確認&lt;br&gt;
&lt;img src=&quot;https://lh3.googleusercontent.com/QPxGFR0-lf0sOfhmBm6Qc-bCqihLmCYXyCqW0Z3FvMjWOiGzOemsiuXmlhl1VLQYpt7gSp2eE-rRMG2XrowiKbTs5CqjcJLqq3s05JLgOJGhZPWdIr8GcnayRPMLq2KDcIN5AkO-hgXz9Ch12WdSKVqc4-_r68gdKb-PoMbbP1e7BsIwKGia-GHraTmCU23DxySyGgPxEm-YgxojuQTEUqK68xy_At1pKM0_hGrCOTWnJ7lSdxmFI7sDMmarqF5VO7LIuI0H3V5XrZLAgYIt2Xj7rEdS8bx0fZ9ZxSopeSO1rcMUgCoDNaPGktuioKRxSJdD05zX5zeEqc7CzXD1J-Vb_kEu99Ll2CuGCxkhAwd69N8PsHVBaF8X4U0TlnyxLRfZiDcdggMfDHiZx0yG8Ny4joS_SyElnXKGwsGb7dqCBHYaXXlLYykeqzIXVtA0R--_ApW6yp8dtjWTbO-5x8iZgCy4aOJhLvehluNW4rRW8w8GLSjAO7lVL5xlbE14rjL_tJirQyBMOLqamp2oDJYHiIEpJQQdtcJfyojQBIzxpPxdTGPqbSsqeNejClghGdnNHZTcNUM5d80OQDHtWgWvrf1uYMjlyqAFyHPYfOoQ8KyE8s3lK_SiCKo-pb6a5QM2UPZgbt2tH9pFCcwmVW_6SkXFLyo=w858-h530-no&quot; alt=&quot;enter image description here&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;最後のメモ-事前準備&quot;&gt;最後のメモ: 事前準備&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Kafka topic作成
cd /usr/hdp/current/kafka-broker
./kafka-topics.sh --create --zookeeper hdp-srv1.demotest.com:218,hdp-srv2.demotest.com:2181,hdp-srv3.demotest.com:2181 --replication-factor 3 --partitions 1 --topic sensor_data_user1

# HDFS folder作成
sudo su - hdfs 
hdfs dfs -mkdir -p /tmp/sensor_data/user1
hdfs dfs -chmod -R 777 /tmp/sensor_data/user1

# sensor_data_user1テーブルにNiFiユーザーにrwx権限追加
hdfs dfs -setfacl -m -R user:nifi:rwx /warehouse/tablespace/managed/hive/sensor_data_user1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</description><link>http://viewse.blogspot.com/2019/06/minifinifihdfshive_5.html</link><author>noreply@blogger.com (Changyao Ye)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/YntfXL0IrK1PG-D07WG5A6vvrUKY4rIGT5jha0uQEA7ptUT8bH1__4rahK0WJX5ni5eREZKYf9gJcOJsh9LSXDGr4yqPo7CxfPKkNS4LJTz8HGxoByhXiBL7h9oLoRYX-4-uI1zhMbPbqdARBQE7Aa3JwLQ-yVncQKFmrImcmR8ozGznOdVFwT5VjZhxFuiLuFypThTOph3x3ZOzwdUv_KeGHA3thWJbwSgdRCbOwh7sV8dN8e7njJL8Ouoohx4_5w7MtNQ4yw9Z4t2B9oGp3P9sBCiyOKSRm_95BEWsFk2BLab_u9nb3egSXHOcX3c2qCwsrZtfZQ6IUVMPQB8FOG3k6tvxnU_CFhzPYIZ1Fb6nvL5KKgKMs3Vk7p06w7AzMd9RH_NDzPn69QOlCZKqucDVYUcRXda3dMqRp6vs2iFyR5u529WCYGPyWp0jG3C4qfOfnJzD6N1ZHJioiOikcehg0Wx8eDYjEGFN9mdaQfOUafPaf7LizAtEgGtaiNCG-mfSqz2ESpdZzk6IYibb7iz-_uXxsHW15L1Zxd9LdZChoLXUeoIqq-g-LIcaTp53kJ0_PBvKTbmlg2CXpgyQkOZO8-0nOILYr77rDYZQcpsWK9IOYzt3U8M30yPTNplKcaF-FFYpwmiErKTnhKa0Lo3HCQ1Jvqc=s72-w1552-h804-c-no" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-790604863159627475</guid><pubDate>Tue, 11 Jun 2019 08:58:00 +0000</pubDate><atom:updated>2019-06-11T17:58:11.435+09:00</atom:updated><title>NiFi ReplaceTextプロセッサのReplacement Valueの書き方</title><description>&lt;!DOCTYPE html&gt;
&lt;html&gt;

&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;NiFi ReplaceTextプロセッサのReplacement Valueの書き方&lt;/title&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;https://stackedit.io/style.css&quot; /&gt;
&lt;/head&gt;

&lt;body class=&quot;stackedit&quot;&gt;
  &lt;div class=&quot;stackedit__html&quot;&gt;&lt;p&gt;NiFiで流れてくるFlowfileの中身をReplace（頭何かデータを入れたい、後ろにデータをつけたいとか）したい場合は、ReplaceTextプロセッサを使えます。&lt;/p&gt;
&lt;p&gt;ReplaceText既定の画面&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/c3e1d047-2694-b5f8-3099-2d5b25936628.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;一個例を見てみましょう&lt;br&gt;
例えば流れてくるFlowfileは一行のCSV&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;aaa,bbb,ccc,ddd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;後ろにeeeをつけたい場合、以下のように書きます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$1,eee
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;FlowfileのAttribute(filenameとか）を後ろにつけたい場合&lt;br&gt;
＄１をシングルクォーテーションで囲む必要です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;${&#39;$1&#39;},${filename}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;$1のdddをfffにreplaceして、eeeを追加したい場合&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;${&#39;$1&#39;:replace(&#39;ddd&#39;,&#39;fff&#39;)},eee
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一番重要なのは$1をシングルクォーテーションで囲むところかなぁ。囲まないと怒られます。&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</description><link>http://viewse.blogspot.com/2019/06/nifi-replacetextreplacement-value.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-8486466911646771916</guid><pubDate>Mon, 10 Jun 2019 12:42:00 +0000</pubDate><atom:updated>2019-06-10T21:42:48.576+09:00</atom:updated><title>FreeIPAとAmbari連携</title><description>&lt;!DOCTYPE html&gt;
&lt;html&gt;

&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;FreeIPAとAmbari連携&lt;/title&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;https://stackedit.io/style.css&quot; /&gt;
&lt;/head&gt;

&lt;body class=&quot;stackedit&quot;&gt;
  &lt;div class=&quot;stackedit__html&quot;&gt;&lt;p&gt;FreeIPAとAmbariの連携方法をメモしておきます。&lt;br&gt;
HDP3.1.0、Ambari 2.7.3の環境です。&lt;/p&gt;
&lt;h1 id=&quot;freeipaのインストール&quot;&gt;FreeIPAのインストール&lt;/h1&gt;
&lt;p&gt;以下のスクリプトでサーバー上にインストールし、いくつかUser、Groupを作成する。&lt;br&gt;
必要に応じて変更してください。&lt;/p&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;#ホスト名&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;export&lt;/span&gt; NAME&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;ipa-srv1
&lt;span class=&quot;token comment&quot;&gt;#Domain名&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;export&lt;/span&gt; DOMAIN&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;demotest.com
&lt;span class=&quot;token function&quot;&gt;export&lt;/span&gt; REALM&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;$(&lt;/span&gt;echo &lt;span class=&quot;token variable&quot;&gt;${DOMAIN}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;awk&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{print toupper(&lt;span class=&quot;token variable&quot;&gt;$0&lt;/span&gt;)}&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;export&lt;/span&gt; IP&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;$(&lt;/span&gt;ip addr &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;state UP&#39;&lt;/span&gt; -A2 &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tail&lt;/span&gt; -n1 &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;awk&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{print &lt;span class=&quot;token variable&quot;&gt;$2&lt;/span&gt;}&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;cut&lt;/span&gt; -f1 -d&lt;span class=&quot;token string&quot;&gt;&#39;/&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;IP is &lt;span class=&quot;token variable&quot;&gt;${IP}&lt;/span&gt;&quot;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${IP}&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;${NAME}&lt;/span&gt;.&lt;span class=&quot;token variable&quot;&gt;${DOMAIN}&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;${NAME}&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hostname&lt;/span&gt; -f&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hostname&lt;/span&gt; -s&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/hosts
hostnamectl set-hostname &lt;span class=&quot;token variable&quot;&gt;${NAME}&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;${DOMAIN}&lt;/span&gt;
hostnamectl --transient set-hostname &lt;span class=&quot;token variable&quot;&gt;${NAME}&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;hostname&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;${NAME}&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;${DOMAIN}&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;echo&lt;/span&gt; 0 &lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; /proc/sys/kernel/hung_task_timeout_secs
&lt;span class=&quot;token function&quot;&gt;ethtool&lt;/span&gt; -K eth0 tso off


&lt;span class=&quot;token function&quot;&gt;hostname&lt;/span&gt; -f
&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; /etc/hosts

&lt;span class=&quot;token comment&quot;&gt;#install packages&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; yum &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; ipa-server ipa-server-dns -y

&lt;span class=&quot;token comment&quot;&gt;#increase entropy&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; /proc/sys/kernel/random/entropy_avail
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; yum &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; -y rng-tools
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; systemctl start rngd
&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; /proc/sys/kernel/random/entropy_avail

&lt;span class=&quot;token comment&quot;&gt;#sometimes needed to avoid server install failing&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;service&lt;/span&gt; dbus restart

&lt;span class=&quot;token comment&quot;&gt;#install IPA server&lt;/span&gt;
ipa-server-install \
--realm &lt;span class=&quot;token variable&quot;&gt;${REALM}&lt;/span&gt; --domain &lt;span class=&quot;token variable&quot;&gt;${DOMAIN}&lt;/span&gt; \
-a BadPass&lt;span class=&quot;token comment&quot;&gt;#1 -p BadPass#1 \&lt;/span&gt;
--setup-dns \
--forwarder&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;8.8.8.8 --allow-zone-overlap --no-host-dns \
--auto-forwarders --auto-reverse --unattended

&lt;span class=&quot;token comment&quot;&gt;#kinit as admin&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;#パスワードをBadPass#1に設定する&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;echo&lt;/span&gt; BadPass&lt;span class=&quot;token comment&quot;&gt;#1 | kinit admin&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# create a new principal to be used for ambari kerberos administration&lt;/span&gt;
ipa user-add hadoopadmin --first&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;Hadoop --last&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;Admin --shell&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/bin/bash

&lt;span class=&quot;token comment&quot;&gt;# create a new principal to be used for read only ldab bind (whose password will expire in 90 days)&lt;/span&gt;
ipa user-add ldapbind --first&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;ldap --last&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;bind

&lt;span class=&quot;token comment&quot;&gt;# create a role and and give it privilege to manage users and services&lt;/span&gt;
ipa role-add hadoopadminrole
ipa role-add-privilege hadoopadminrole --privileges&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;User Administrators&quot;&lt;/span&gt;
ipa role-add-privilege hadoopadminrole --privileges&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Service Administrators&quot;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;#add the hadoopadmin user to the role&lt;/span&gt;
ipa role-add-member hadoopadminrole --users&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;hadoopadmin

&lt;span class=&quot;token comment&quot;&gt;#create users/groups&lt;/span&gt;
ipa group-add analyst --desc analyst
ipa group-add hr --desc hr
ipa group-add legal --desc legal
ipa group-add sales --desc sales
ipa group-add etl --desc etl
ipa group-add us_employee --desc us_employee
ipa group-add eu_employee --desc eu_employee
ipa group-add intern --desc intern
ipa group-add sudoers --desc sudoers

ipa user-add legal1 --first&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;legal1 --last&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;legal1 --shell&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/bin/bash
ipa user-add legal2 --first&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;legal2 --last&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;legal2 --shell&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/bin/bash
ipa user-add legal3 --first&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;legal3 --last&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;legal3 --shell&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/bin/bash
ipa user-add hr1 --first&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;hr1 --last&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;hr1 --shell&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/bin/bash
ipa user-add hr2 --first&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;hr2 --last&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;hr2 --shell&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/bin/bash
ipa user-add hr3 --first&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;hr3 --last&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;hr3 --shell&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/bin/bash
ipa user-add sales1 --first&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;sales1 --last&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;sales1 --shell&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/bin/bash
ipa user-add sales2 --first&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;sales2 --last&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;sales2 --shell&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/bin/bash
ipa user-add sales3 --first&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;sales3 --last&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;sales3 --shell&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/bin/bash
ipa user-add joe_analyst --first&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;joe --last&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;analyst --shell&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/bin/bash
ipa user-add ivanna_eu_hr --first&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;ivanna --last&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;hr --shell&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/bin/bash
ipa user-add scott_intern --first&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;scott --last&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;intern --shell&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/bin/bash
ipa user-add noobie --first&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;jon --last&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;snow --shell&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/bin/bash

ipa group-add-member legal --users&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;legal1
ipa group-add-member legal --users&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;legal2
ipa group-add-member legal --users&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;legal3

ipa group-add-member hr --users&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;hr1
ipa group-add-member hr --users&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;hr2
ipa group-add-member hr --users&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;hr3
ipa group-add-member hr --users&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;ivanna_eu_hr

ipa group-add-member sales --users&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;sales1
ipa group-add-member sales --users&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;sales2
ipa group-add-member sales --users&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;sales3

ipa group-add-member analyst --users&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;joe_analyst
ipa group-add-member intern --users&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;scott_intern
ipa group-add-member us_employee --users&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;joe_analyst
ipa group-add-member eu_employee --users&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;ivanna_eu_hr

&lt;span class=&quot;token comment&quot;&gt;# create sudo rule&lt;/span&gt;
ipa sudorule-add admin_all_rule
ipa sudorule-mod admin_all_rule --cmdcat&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;all --hostcat&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;all
ipa sudorule-add-user admin_all_rule --groups&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;sudoers

&lt;span class=&quot;token comment&quot;&gt;# add noobie to the sudoers user, to enable sudo rules&lt;/span&gt;
ipa group-add-member sudoers --users&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;noobie


&lt;span class=&quot;token keyword&quot;&gt;echo&lt;/span&gt; BadPass&lt;span class=&quot;token comment&quot;&gt;#1 &amp;gt; tmp.txt&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;echo&lt;/span&gt; BadPass&lt;span class=&quot;token comment&quot;&gt;#1 &amp;gt;&amp;gt; tmp.txt&lt;/span&gt;


ipa &lt;span class=&quot;token function&quot;&gt;passwd&lt;/span&gt; hadoopadmin &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; tmp.txt
ipa &lt;span class=&quot;token function&quot;&gt;passwd&lt;/span&gt; ldapbind &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; tmp.txt

ipa &lt;span class=&quot;token function&quot;&gt;passwd&lt;/span&gt; legal1 &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; tmp.txt
ipa &lt;span class=&quot;token function&quot;&gt;passwd&lt;/span&gt; legal2 &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; tmp.txt
ipa &lt;span class=&quot;token function&quot;&gt;passwd&lt;/span&gt; legal3 &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; tmp.txt
ipa &lt;span class=&quot;token function&quot;&gt;passwd&lt;/span&gt; hr1 &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; tmp.txt
ipa &lt;span class=&quot;token function&quot;&gt;passwd&lt;/span&gt; hr2 &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; tmp.txt
ipa &lt;span class=&quot;token function&quot;&gt;passwd&lt;/span&gt; hr3 &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; tmp.txt
ipa &lt;span class=&quot;token function&quot;&gt;passwd&lt;/span&gt; sales1 &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; tmp.txt
ipa &lt;span class=&quot;token function&quot;&gt;passwd&lt;/span&gt; sales2 &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; tmp.txt
ipa &lt;span class=&quot;token function&quot;&gt;passwd&lt;/span&gt; sales3 &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; tmp.txt

ipa &lt;span class=&quot;token function&quot;&gt;passwd&lt;/span&gt; joe_analyst &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; tmp.txt
ipa &lt;span class=&quot;token function&quot;&gt;passwd&lt;/span&gt; ivanna_eu_hr &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; tmp.txt
ipa &lt;span class=&quot;token function&quot;&gt;passwd&lt;/span&gt; scott_intern &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; tmp.txt

&lt;span class=&quot;token function&quot;&gt;rm&lt;/span&gt; -f tmp.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;freeipaの管理画面&quot;&gt;FreeIPAの管理画面&lt;/h1&gt;
&lt;p&gt;管理画面でUser,Group,Password Policy等情報を確認設定できます。&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/ee84eed5-f942-448f-0b4d-279e8bb62fc9.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;ambariのldap設定&quot;&gt;AmbariのLDAP設定&lt;/h1&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;ambari-server setup-ldap

Using python  /usr/bin/python
Currently &lt;span class=&quot;token string&quot;&gt;&#39;no auth method&#39;&lt;/span&gt; is configured, &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; you wish to use LDAP instead &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;y/n&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;y&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;? &lt;span class=&quot;token function&quot;&gt;yes&lt;/span&gt;
Enter Ambari Admin login: admin
Enter Ambari Admin password:

Fetching LDAP configuration from DB. No configuration.
Please &lt;span class=&quot;token keyword&quot;&gt;select&lt;/span&gt; the &lt;span class=&quot;token function&quot;&gt;type&lt;/span&gt; of LDAP you want to use &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;AD/IPA/Generic&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Generic&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:IPA
Primary LDAP Host &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ipa.ambari.apache.org&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;: ipa-srv1.demotest.com
Primary LDAP Port &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;636&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;: 389
Secondary LDAP Host &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Optional&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;:
Secondary LDAP Port &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Optional&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;:
Use SSL &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;true/false&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;true&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;: &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;
User object class &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;posixAccount&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;: person
User ID attribute &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;uid&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;: uid
Group object class &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;posixGroup&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;: groupofnames
Group name attribute &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cn&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;: cn
Group member attribute &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;member&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;: member
Distinguished name attribute &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;dn&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;: dn
Search Base &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cn&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;accounts,dc&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;ambari,dc&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;apache,dc&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;org&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;: dc&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;demotest,dc&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;com
Referral method &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;follow/ignore&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;follow&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:follow
Bind anonymously &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;true/false&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;false&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;: &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;
Bind DN &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;uid&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;ldapbind,cn&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;users,cn&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;accounts,dc&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;ambari,dc&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;apache,dc&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;org&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;: uid&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;ldapbind,cn&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;users,cn&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;accounts,dc&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;demotest,dc&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;com
Enter Bind DN Password:
Confirm Bind DN Password:
Handling behavior &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; username collisions &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;convert/skip&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; LDAP &lt;span class=&quot;token function&quot;&gt;sync&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;skip&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;: convert
Force lower-case user names &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;true/false&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;:false
Results from LDAP are paginated when requested &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;true/false&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;:false
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;
Review Settings
&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt;
Primary LDAP Host &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ipa.ambari.apache.org&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:  ipa-srv1.demotest.com
Primary LDAP Port &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;636&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:  389
Use SSL &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;true/false&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;true&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:  &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;
User object class &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;posixAccount&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:  person
User ID attribute &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;uid&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:  uid
Group object class &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;posixGroup&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:  groupofnames
Group name attribute &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cn&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:  cn
Group member attribute &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;member&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:  member
Distinguished name attribute &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;dn&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:  dn
Search Base &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cn&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;accounts,dc&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;ambari,dc&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;apache,dc&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;org&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:  dc&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;demotest,dc&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;com
Referral method &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;follow/ignore&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;follow&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:  follow
Bind anonymously &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;true/false&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;false&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:  &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;
Handling behavior &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; username collisions &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;convert/skip&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; LDAP &lt;span class=&quot;token function&quot;&gt;sync&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;skip&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:  convert
Force lower-case user names &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;true/false&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;: &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;
Results from LDAP are paginated when requested &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;true/false&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;: &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;
ambari.ldap.connectivity.bind_dn: uid&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;ldapbind,cn&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;users,cn&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;accounts,dc&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;demotest,dc&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;com
ambari.ldap.connectivity.bind_password: *****
Save settings &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;y/n&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;y&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;? y
Saving LDAP properties&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
Saving LDAP properties finished
Ambari Server &lt;span class=&quot;token string&quot;&gt;&#39;setup-ldap&#39;&lt;/span&gt; completed successfully.
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;ambariからldap同期&quot;&gt;AmbariからLDAP同期&lt;/h1&gt;
&lt;p&gt;Ambariの既定のID/password(admin/admin)を使用&lt;/p&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;
ambari-server sync-ldap --ldap-sync-admin-name&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;admin --ldap-sync-admin-password&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;admin --all
Using python  /usr/bin/python
Syncing with LDAP&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.

Fetching LDAP configuration from DB.
Syncing all&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.

Completed LDAP Sync.
Summary:
  memberships:
    removed &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; 0
    created &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; 33
  users:
    skipped &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; 0
    removed &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; 0
    updated &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; 1
    created &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; 15
  groups:
    updated &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; 0
    removed &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; 0
    created &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; 292

Ambari Server &lt;span class=&quot;token string&quot;&gt;&#39;sync-ldap&#39;&lt;/span&gt; completed successfully.

&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;ambariにログインしてadminadmin、特定のユーザーにambariの管理権限を付与する&quot;&gt;Ambariにログインして(admin/admin)、特定のユーザーにambariの管理権限を付与する&lt;/h1&gt;
&lt;p&gt;ここではhadoopadminというユーザーにambari adminに設定する&lt;br&gt;
NoからYesに変更する&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/b190181d-9f3d-af72-6e2a-52f228787bd3.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/30a34a9f-277d-a8ba-80dc-72210c4ff386.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;hadoopadminユーザーでambariにログインする&quot;&gt;hadoopadminユーザーでAmbariにログインする&lt;/h1&gt;
&lt;p&gt;hadoopadminでログインできていることを確認&lt;br&gt;
&lt;img src=&quot;https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110403/c021e45e-25ad-d339-f6b5-c92ec19c37a8.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</description><link>http://viewse.blogspot.com/2019/06/freeipaambari.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-1422118639714648826</guid><pubDate>Fri, 07 Jun 2019 16:08:00 +0000</pubDate><atom:updated>2019-06-08T01:10:15.477+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Ambari</category><title>AmbariのMetrics monitor起動 due to AttributeError: &#39;module&#39; object has no attribute &#39;boot_time&#39;ｎ</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;html&gt;

&lt;head&gt;
  
  
  &lt;title&gt;AmbariのMetrics monitor起動 due to AttributeError: &#39;module&#39; object has no attribute &#39;boot_time&#39;ｎ&lt;/title&gt;
  &lt;link href=&quot;https://stackedit.io/style.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;
&lt;/head&gt;

&lt;body class=&quot;stackedit&quot;&gt;
  &lt;div class=&quot;stackedit__html&quot;&gt;
以下のエラーでAmbariのMetrics monitor起動に失敗することがあります。&lt;br /&gt;

&lt;pre&gt;&lt;code&gt;Traceback (most recent call last):
  File &quot;/var/lib/ambari-agent/cache/stacks/HDP/3.0/services/AMBARI_METRICS/package/scripts/metrics_monitor.py&quot;, line 78, in &lt;module&gt;
    AmsMonitor().execute()
  File &quot;/usr/lib/ambari-agent/lib/resource_management/libraries/script/script.py&quot;, line 352, in execute
    method(env)
  File &quot;/var/lib/ambari-agent/cache/stacks/HDP/3.0/services/AMBARI_METRICS/package/scripts/metrics_monitor.py&quot;, line 43, in start
    action = &#39;start&#39;
  File &quot;/usr/lib/ambari-agent/lib/ambari_commons/os_family_impl.py&quot;, line 89, in thunk
    return fn(*args, **kwargs)
  File &quot;/var/lib/ambari-agent/cache/stacks/HDP/3.0/services/AMBARI_METRICS/package/scripts/ams_service.py&quot;, line 109, in ams_service
    user=params.ams_user
  File &quot;/usr/lib/ambari-agent/lib/resource_management/core/base.py&quot;, line 166, in __init__
    self.env.run()
  File &quot;/usr/lib/ambari-agent/lib/resource_management/core/environment.py&quot;, line 160, in run
    self.run_action(resource, action)
  File &quot;/usr/lib/ambari-agent/lib/resource_management/core/environment.py&quot;, line 124, in run_action
    provider_action()
  File &quot;/usr/lib/ambari-agent/lib/resource_management/core/providers/system.py&quot;, line 263, in action_run
    returns=self.resource.returns)
  File &quot;/usr/lib/ambari-agent/lib/resource_management/core/shell.py&quot;, line 72, in inner
    result = function(command, **kwargs)
  File &quot;/usr/lib/ambari-agent/lib/resource_management/core/shell.py&quot;, line 102, in checked_call
    tries=tries, try_sleep=try_sleep, timeout_kill_strategy=timeout_kill_strategy, returns=returns)
  File &quot;/usr/lib/ambari-agent/lib/resource_management/core/shell.py&quot;, line 150, in _call_wrapper
    result = _call(command, **kwargs_copy)
  File &quot;/usr/lib/ambari-agent/lib/resource_management/core/shell.py&quot;, line 314, in _call
    raise ExecutionFailed(err_msg, code, out, err)
resource_management.core.exceptions.ExecutionFailed: Execution of &#39;/usr/sbin/ambari-metrics-monitor --config /etc/ambari-metrics-monitor/conf start&#39; returned 255. psutil build directory is not empty, continuing...
Verifying Python version compatibility...
Using python  /usr/bin/python2.7
Checking for previously running Metric Monitor...
/var/run/ambari-metrics-monitor/ambari-metrics-monitor.pid found with no process. Removing 5237...
Starting ambari-metrics-monitor
Verifying ambari-metrics-monitor process status with PID : 11790
Output of PID check : 
ERROR: ambari-metrics-monitor start failed. For more details, see /var/log/ambari-metrics-monitor/ambari-metrics-monitor.out:
====================
    server_process_main(stop_handler)
  File &quot;/usr/lib/python2.6/site-packages/resource_monitoring/main.py&quot;, line 64, in server_process_main
    controller = Controller(main_config, stop_handler)
  File &quot;/usr/lib/python2.6/site-packages/resource_monitoring/core/controller.py&quot;, line 46, in __init__
    hostinfo = HostInfo(config)
  File &quot;/usr/lib/python2.6/site-packages/resource_monitoring/core/host_info.py&quot;, line 49, in __init__
    self.__host_static_info = self.get_host_static_info()
  File &quot;/usr/lib/python2.6/site-packages/resource_monitoring/core/host_info.py&quot;, line 235, in get_host_static_info
    boot_time = psutil.boot_time()
AttributeError: &#39;module&#39; object has no attribute &#39;boot_time&#39;
====================
Monitor out at: /var/log/ambari-metrics-monitor/ambari-metrics-monitor.out
&lt;/module&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;解決策&quot;&gt;
解決策&lt;/h3&gt;
以下を実行する&lt;br /&gt;

&lt;pre&gt;&lt;code&gt;cd /usr/lib/python2.6/site-packages/resource_monitoring/psutil
make install ambari-metrics-monitor restart
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
&lt;/div&gt;
</description><link>http://viewse.blogspot.com/2019/06/ambarimetrics-monitor-due-to.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-1633106963174665433</guid><pubDate>Thu, 09 May 2019 04:55:00 +0000</pubDate><atom:updated>2019-06-05T15:49:54.022+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flink</category><category domain="http://www.blogger.com/atom/ns#">PMML</category><category domain="http://www.blogger.com/atom/ns#">Spark</category><category domain="http://www.blogger.com/atom/ns#">Storm</category><title>Spark MLで作ったモデルをどうやってStormやFlinkで使うか</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;ennote&quot;&gt;
&lt;div&gt;
Spark MLでトレーニングしたモデルをStormやFlinkで使う方法をメモしておきます。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Storm&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://community.hortonworks.com/questions/24092/how-to-use-spark-mllib-model-in-storm.html&quot;&gt;https://community.hortonworks.com/questions/24092/how-to-use-spark-mllib-model-in-storm.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
１，PMMLを使う&lt;/div&gt;
&lt;div&gt;
ただ、この場合はFeature scalingや特徴量変換処理を事前にやる必要があるそうです。&lt;/div&gt;
&lt;div&gt;
そのかわりに、JPMMLを使う&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://github.com/jpmml/jpmml-storm&quot;&gt;https://github.com/jpmml/jpmml-storm&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyaYQKO_JGg00LKEb49keFlbu6PDVtuCLRPWUnWslOhseOs1_e8PuuZozr0TavSuQTNW2GZtlQZG7eH09QTrjUHVOZVtK-_uYPYj0IcLjsLM3kp7iNDanLIPCTiQNOXpvYq_iYUwu7qEbx/s1600/ff9259373a996a2ff13f5fd3dd4f5452-757821.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_6688886538203054274&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyaYQKO_JGg00LKEb49keFlbu6PDVtuCLRPWUnWslOhseOs1_e8PuuZozr0TavSuQTNW2GZtlQZG7eH09QTrjUHVOZVtK-_uYPYj0IcLjsLM3kp7iNDanLIPCTiQNOXpvYq_iYUwu7qEbx/s320/ff9259373a996a2ff13f5fd3dd4f5452-757821.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
2, それでもう一つ方法はStormのコードにSparkのMLlib Jarをインポートして、そのままSpark MLlibのクラスでSpark Modelを呼び出すがあります。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Flink&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://stackoverflow.com/questions/42816766/is-it-possible-to-apply-spark-ml-crossvalidatormodel-into-flink-streaming-data-f&quot;&gt;https://stackoverflow.com/questions/42816766/is-it-possible-to-apply-spark-ml-crossvalidatormodel-into-flink-streaming-data-f&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwA64O2jFeZPEp5pWDliW6dyhbvKAvRlxaunjbB74LJEfSHwOrQisYNnOhd_LBTeIAHebDfCa-kqdrLj9oGNOjlY6pgpuX8TUH7zEBYF8ZaQYUA2xONKiBKmnji7g2MxPlAk7DAVVbwwfD/s1600/1fd97427586a5fa6c220c5a1840c93c3-759979.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_6688886547680718530&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwA64O2jFeZPEp5pWDliW6dyhbvKAvRlxaunjbB74LJEfSHwOrQisYNnOhd_LBTeIAHebDfCa-kqdrLj9oGNOjlY6pgpuX8TUH7zEBYF8ZaQYUA2xONKiBKmnji7g2MxPlAk7DAVVbwwfD/s320/1fd97427586a5fa6c220c5a1840c93c3-759979.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
JPMML(on top of PMML)がよく動く!&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://github.com/FlinkML/flink-jpmml&quot;&gt;https://github.com/FlinkML/flink-jpmml&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
MLeapは非現実的？&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://github.com/combust/mleap&quot;&gt;https://github.com/combust/mleap&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
PFAが有望的！&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://berlin-2017.flink-forward.org/index.html%3Fp=2615.html&quot;&gt;https://berlin-2017.flink-forward.org/index.html%3Fp=2615.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWeSkmiJTuJXMQ5LeCpS6s3CXew1XvOZdCe_MRlknCxdQphd9tBm7JtXq32HqkHKhoKhqVQJLaEUggvlK4n1bQaTFaNwoVuoDXE3U1-tm_fBaMfRI3D2sWd0MNwbexGhYmgcYF84Ai0KPA/s1600/fd0f96c4edc1643b34e3dd7bc3d8754a-761840.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_6688886557733044178&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWeSkmiJTuJXMQ5LeCpS6s3CXew1XvOZdCe_MRlknCxdQphd9tBm7JtXq32HqkHKhoKhqVQJLaEUggvlK4n1bQaTFaNwoVuoDXE3U1-tm_fBaMfRI3D2sWd0MNwbexGhYmgcYF84Ai0KPA/s320/fd0f96c4edc1643b34e3dd7bc3d8754a-761840.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Flink model serving site&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://cwiki.apache.org/confluence/display/FLINK/FLIP-23+-+Model+Serving&quot;&gt;https://cwiki.apache.org/confluence/display/FLINK/FLIP-23+-+Model+Serving&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;border-top: 1px solid #e6e6e6; margin-bottom: 16px; margin-top: 32px; padding-top: 16px; width: 100%px;&quot;&gt;   &lt;tbody&gt;
&lt;tr&gt;    &lt;td style=&quot;color: #333333; font-family: &amp;quot;helvetica&amp;quot; , &amp;quot;arial&amp;quot; , sans-serif; font-size: 13px; line-height: 16px; text-align: left;&quot;&gt;Evernote はあなたがすべてを記憶し、手間をかけずに整理できるようにお手伝いします。&lt;a href=&quot;https://www.evernote.com/getit?utm_source=service&amp;amp;utm_medium=email&amp;amp;utm_content=emailNote&amp;amp;email_name=emailNote&amp;amp;email_guid=8efab8bd-ecc8-49a9-8ec1-43b37759d4d5&amp;amp;email_link=download_app&quot; style=&quot;color: #5fb336; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Evernote をダウンロードする&lt;/a&gt;    &lt;/td&gt;   &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
</description><link>http://viewse.blogspot.com/2019/05/spark-mlstormflink.html</link><author>noreply@blogger.com (Changyao Ye)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyaYQKO_JGg00LKEb49keFlbu6PDVtuCLRPWUnWslOhseOs1_e8PuuZozr0TavSuQTNW2GZtlQZG7eH09QTrjUHVOZVtK-_uYPYj0IcLjsLM3kp7iNDanLIPCTiQNOXpvYq_iYUwu7qEbx/s72-c/ff9259373a996a2ff13f5fd3dd4f5452-757821.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-8037009314402156536</guid><pubDate>Thu, 09 May 2019 01:25:00 +0000</pubDate><atom:updated>2019-06-06T10:16:01.654+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Ambari</category><title>Ambari local login</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;ennote&quot;&gt;
&lt;div&gt;
Knox経由でAmbariにログインするときに、常にKnoxの画面が表示されます。&lt;/div&gt;
&lt;div&gt;
Knoxに何か問題があったら、Ambariにログインできなくなります。&lt;/div&gt;
&lt;div&gt;
でもAmbariにログインしたいですよね。その場合は、以下のようなURLでKnox経由しなくて、従来のAmbariにログインできます。&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://hdp-srv1.demotest.com:8080/#/login/local&quot;&gt;http://aaa.bbb.com:8080/#/login/local&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
URLの後ろにlocalをつけます。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;border-top: 1px solid #e6e6e6; margin-bottom: 16px; margin-top: 32px; padding-top: 16px; width: 100%px;&quot;&gt;   &lt;tbody&gt;
&lt;tr&gt;    &lt;td style=&quot;color: #333333; font-family: &amp;quot;helvetica&amp;quot; , &amp;quot;arial&amp;quot; , sans-serif; font-size: 13px; line-height: 16px; text-align: left;&quot;&gt;Evernote はあなたがすべてを記憶し、手間をかけずに整理できるようにお手伝いします。&lt;a href=&quot;https://www.evernote.com/getit?utm_source=service&amp;amp;utm_medium=email&amp;amp;utm_content=emailNote&amp;amp;email_name=emailNote&amp;amp;email_guid=d7581314-1cab-4d91-a4d5-08e5aaa5f470&amp;amp;email_link=download_app&quot; style=&quot;color: #5fb336; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Evernote をダウンロードする&lt;/a&gt;    &lt;/td&gt;   &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
</description><link>http://viewse.blogspot.com/2019/05/ambari-local-login.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-8902803179339746526</guid><pubDate>Mon, 15 Apr 2019 01:26:00 +0000</pubDate><atom:updated>2019-04-15T10:26:28.202+09:00</atom:updated><title>Apache Arrowメモ</title><description>&lt;div class=&quot;ennote&quot;&gt;&lt;div&gt;Arrowが目指していること&lt;/div&gt;&lt;div&gt;メモリ上のデータを効率化することです。&lt;/div&gt;&lt;div&gt;&lt;br/&gt;&lt;/div&gt;&lt;div&gt;向いていること&lt;/div&gt;&lt;div&gt;&lt;span&gt;大量データの交換&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;メモリ上のでの大量データの分析処理&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;速度&lt;/div&gt;&lt;div&gt;シリアライズ、デシリアライズコストが小さいデータフォーマット。各種システムで共通で使う必要があり、各種言語のライブラリも開発中&lt;/div&gt;&lt;div&gt;&lt;br/&gt;&lt;/div&gt;&lt;div&gt;並列処理&lt;/div&gt;&lt;div&gt;できるだけデータを局所化する配置になっている&lt;/div&gt;&lt;div&gt;OLTPよりOLAPに向いています。&lt;/div&gt;&lt;div&gt;OLTPはECサイトのように行単位の追加、更新、削除処理が多い、RDB&lt;/div&gt;&lt;div&gt;OLAPは列に対する操作（Count, group by）が多い。&lt;/div&gt;&lt;div&gt;Arrowは列志向&lt;/div&gt;&lt;div&gt;&lt;br/&gt;&lt;/div&gt;&lt;div&gt;&lt;br/&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://www.clear-code.com/blog/2018/9/5.html&quot;&gt;https://www.clear-code.com/blog/2018/9/5.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br/&gt;&lt;/div&gt;&lt;div&gt;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt; &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;100%&quot; style=&quot;margin-bottom:16px;margin-top:32px;padding-top:16px;border-top:1px solid #e6e6e6;&quot;&gt;   &lt;tr&gt;    &lt;td style=&quot;text-align:left;font-size:13px;line-height:16px;color:#333333;font-family:Helvetica, Arial, sans-serif;&quot;&gt;      Evernote はあなたがすべてを記憶し、手間をかけずに整理できるようにお手伝いします。&lt;a href=&#39;https://www.evernote.com/getit?utm_source=service&amp;utm_medium=email&amp;utm_content=emailNote&amp;email_name=emailNote&amp;email_guid=134b5cbd-c1a7-48e3-b0aa-5a8fbf10ba31&amp;email_link=download_app&#39; target=&#39;_blank&#39; style=&#39;color: #5fb336; text-decoration: none;&#39;&gt;Evernote をダウンロードする&lt;/a&gt;    &lt;/td&gt;   &lt;/tr&gt; &lt;/table&gt;  </description><link>http://viewse.blogspot.com/2019/04/apache-arrow.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-7047206543106727106</guid><pubDate>Thu, 11 Apr 2019 10:19:00 +0000</pubDate><atom:updated>2019-06-05T15:49:29.435+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Druid</category><title>Druid起動時エラー</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;ennote&quot;&gt;
&lt;div&gt;
AmbariでDruidをインストールして起動すると以下のエラーが出力されます。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: whitesmoke; color: #333333; font-family: monospace; font-size: 11px; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: 14px; orphans: 2; widows: 2; word-spacing: 0px;&quot;&gt;
resource_management.core.exceptions.ExecutionFailed: Execution of &#39;/usr/java/default/bin/java -cp /usr/lib/ambari-agent/DBConnectionVerification.jar:/usr/hdp/current/druid-historical/extensions/mysql-metadata-storage/mysql-connector-java-8.0.15-1.el7.noarch.rpm org.apache.ambari.server.DBConnectionVerification &#39;jdbc:&lt;a href=&quot;mysql://localhost:3306/druid?createDatabaseIfNotExist=true&quot;&gt;mysql://localhost:3306/druid?createDatabaseIfNotExist=true&lt;/a&gt;&#39; druid [PROTECTED] com.mysql.jdbc.Driver&#39; returned 1. ERROR: Unable to connect to the DB. Please check DB connection properties.&lt;/div&gt;
&lt;div style=&quot;background-color: whitesmoke; color: #333333; font-family: monospace; font-size: 11px; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: 14px; orphans: 2; widows: 2; word-spacing: 0px;&quot;&gt;
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
mysql-connect jarが見つからないためのエラーです。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
以下のようにambari-serverコマンド実行する&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: #f6f8fa; color: #24292e; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: 1.45; orphans: 2; widows: 2; word-spacing: 0px;&quot;&gt;
wget &lt;a href=&quot;http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.37/mysql-connector-java-5.1.37.jar&quot;&gt;http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.37/mysql-connector-java-5.1.37.jar&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: #f6f8fa; color: #24292e; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: 1.45; orphans: 2; widows: 2; word-spacing: 0px;&quot;&gt;
ambari-server setup --jdbc-db=mysql --jdbc-driver=&amp;lt;location where you downloaded mysql connector&amp;gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;border-top: 1px solid #e6e6e6; margin-bottom: 16px; margin-top: 32px; padding-top: 16px; width: 100%px;&quot;&gt;   &lt;tbody&gt;
&lt;tr&gt;    &lt;td style=&quot;color: #333333; font-family: &amp;quot;helvetica&amp;quot; , &amp;quot;arial&amp;quot; , sans-serif; font-size: 13px; line-height: 16px; text-align: left;&quot;&gt;Evernote はあなたがすべてを記憶し、手間をかけずに整理できるようにお手伝いします。&lt;a href=&quot;https://www.evernote.com/getit?utm_source=service&amp;amp;utm_medium=email&amp;amp;utm_content=emailNote&amp;amp;email_name=emailNote&amp;amp;email_guid=341efc64-8cb6-456f-8181-aecada11f228&amp;amp;email_link=download_app&quot; style=&quot;color: #5fb336; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Evernote をダウンロードする&lt;/a&gt;    &lt;/td&gt;   &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
</description><link>http://viewse.blogspot.com/2019/04/druid.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-8767237280746748841</guid><pubDate>Wed, 10 Apr 2019 09:41:00 +0000</pubDate><atom:updated>2019-06-05T15:49:09.348+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HIVE</category><title>BeelineでHiveに接続する際のエラー</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;ennote&quot;&gt;
&lt;div&gt;
KerberosされたHadoop環境でbeelineでHiveに接続するときのエラーと対処法をご紹介します。&lt;/div&gt;
&lt;div&gt;
beeline -u &quot;jdbc:hive2://hostname:10000/default&quot;　で接続する&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Error 1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
ERROR org.apache.thrift.server.TThreadPoolServer: [HiveServer2-Handler-Pool: Thread-40]: Error occurred during processing of message.java.lang.RuntimeException: org.apache.thrift.transport.TTransportException: Unsupported mechanism type PLAIN&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;対処法&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-style: normal; font-weight: normal;&quot;&gt;Kerberosされた環境で接続URLにprincipalを指定する必要がある。&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
beeline -u &quot;jdbc:hive2://hostname:10000/default;principal=user1@HADOOP&quot;　で接続する&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Error 2&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-style: normal; font-weight: normal;&quot;&gt;Error: Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000/default;principal=user1@HADOOP: Kerberos principal should have 3 parts: user1@HADOOP (state=08S01,code=0)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;対処法&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
principalにはuser/hostname@REALM　User、Hostname、Realm３つのPartが必要&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Error 3&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-style: normal; font-weight: normal;&quot;&gt;Caused by: org.ietf.jgss.GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7) - LOOKING_UP_SERVER)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-style: normal; font-weight: normal;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-style: normal; font-weight: normal;&quot;&gt;Caused by: sun.security.krb5.KrbException: Server not found in Kerberos database (7) - LOOKING_UP_SERVER&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-style: normal; font-weight: normal;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-style: normal; font-weight: normal;&quot;&gt;Caused by: sun.security.krb5.Asn1Exception: Identifier doesn&#39;t match expected value (906)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-style: normal; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-style: normal; font-weight: normal;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;対処法&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
principalには　hive/hiveserver2_hostname@REALM　のように、user HiveとHiveserver2のホスト名を指定することが必要&lt;/div&gt;
&lt;div&gt;
beeline -u &quot;jdbc:hive2://192.168.10.154:10000/default;principal=hive/&lt;a href=&quot;http://ip-192-168-10-154.ap-northeast-1.compute.internal@hadoop/&quot;&gt;ip-192-168-10-154.ap-northeast-1.compute.internal@HADOOP&lt;/a&gt;&quot;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
参考&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://community.hortonworks.com/questions/9306/beeline-and-kerberos.html&quot;&gt;https://community.hortonworks.com/questions/9306/beeline-and-kerberos.html&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;border-top: 1px solid #e6e6e6; margin-bottom: 16px; margin-top: 32px; padding-top: 16px; width: 100%px;&quot;&gt;   &lt;tbody&gt;
&lt;tr&gt;    &lt;td style=&quot;color: #333333; font-family: &amp;quot;helvetica&amp;quot; , &amp;quot;arial&amp;quot; , sans-serif; font-size: 13px; line-height: 16px; text-align: left;&quot;&gt;Evernote はあなたがすべてを記憶し、手間をかけずに整理できるようにお手伝いします。&lt;a href=&quot;https://www.evernote.com/getit?utm_source=service&amp;amp;utm_medium=email&amp;amp;utm_content=emailNote&amp;amp;email_name=emailNote&amp;amp;email_guid=b8d6e573-14cf-48b4-8f5a-a526d0925b8a&amp;amp;email_link=download_app&quot; style=&quot;color: #5fb336; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Evernote をダウンロードする&lt;/a&gt;    &lt;/td&gt;   &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
</description><link>http://viewse.blogspot.com/2019/04/beelinehive.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-1140685900576105575</guid><pubDate>Fri, 28 Dec 2018 14:10:00 +0000</pubDate><atom:updated>2018-12-28T23:10:57.958+09:00</atom:updated><title>2018年振り返り</title><description>---


---

&lt;h1 id=&quot;年振り返り&quot;&gt;2018年振り返り&lt;/h1&gt;
&lt;p&gt;久しぶりにブログを書きます。&lt;br&gt;
いろいろがあって（書く時間がないか、書くものがないか、書きたい気分ではないか、どっちもあると思います）、あまりかけてないのがこの一年半でした。&lt;/p&gt;
&lt;p&gt;2018年はいろんな意味で有意義な一年になりました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;大学卒業10年、来日も10年&lt;br&gt;
10年、長いか、短いか、どっちも言えますが、この10年特に大きな挫折がなく過ごしてきました。家庭、仕事、子供などなど。二、三年おきに大きなイベントありました。人生三分の一は日本にいます。こう考えると長いと感じています。&lt;br&gt;
これからも、おそらくずっと日本にいます。三分の一は二分の一、四分の三、という感じに変わっていくだろう。今後は自分どうなるかあまり想像していないが、未来より現在を大事にするのが今までのポリシーで、これからも変わらないと思います。むしろ変えたくないです。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;サイバーエージェント退職しHortonworksに入社&lt;br&gt;
今まで、JBS、GMOクリック証券、CyberAgentで貴重な経験させていただきました。&lt;br&gt;
JBS時代は、主にMicrosoftサーバー製品（Windows Server[AD, DNS, File Server…], Exchange Server, SharePoint Server, Office 365, Hyper-V、System Center製品群などなど）をベースにしたソリューション設計、構築をやってました。社内向けのサポート、製品検証、ちょっとしたツール開発などもやりました。&lt;/p&gt;
&lt;p&gt;GMOクリック証券時代は、インフラエンジニアとして一年ちょっとくらいやってました。土曜にデータセンターでの作業が多かったです。ハードラッキング、OSいれて、ミドル入れて、開発に渡すみたいな感じでした。障害対応もチーム内でローテーションでやってました。アラートメールが来たときにドキドキ感が今でも覚えています。&lt;br&gt;
GMOの後半2年くらいは、開発やってました。Java、GoLang、Scala、PHPなどでいくつかプロジェクトやってました。海外のトレーディングシステムのコア部分のテストも経験しました。&lt;br&gt;
もう一つ重要なプロジェクトは社内のビッグデータ基盤の運用でした。HortonworksのHDPを使ってました。&lt;/p&gt;
&lt;p&gt;サイバーエージェント時代は、主に社内ビッグデータ基盤周りの開発と運用業務でした。プロトタイプのHadoopクラスタ管理ツール開発したり、Kuduによるファストデータ活用で、Kafka, Flume, Kudu, Prestoなどを検証し、本番導入したりしました。ClouderaのCDHを使ってました。&lt;/p&gt;
&lt;p&gt;そして縁があってHortonworksにSEとして入社しました。BigData関連のソリューションアーキテクトとして、お客さんに提案する立場になりました。いかに製品や技術をわかりやすい言葉でお客さんに紹介するか、実践しながらコツを掴んできています。最初は緊張やうまく表現できない部分もありましたが、じょじょに慣れてつまづいたときも臨機応変で対応できるようになりつつある。これからも更に進化していきたいと思います。&lt;br&gt;
来年はHortonworksは長年競争してきたClouderaと合併します。2強が一つになって、それぞれいいところ（製品など）をとって更に進化したプロダクトがリリースされることを期待しています。BigData、AI業界もますます盛り上がるのではないかと思っています。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;最後に来年三人目の子供が生まれる予定&lt;br&gt;
名前を考え中です。笑）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2018年の振り返り書きながら、過去10年みたいな振り返りになってしまいました。&lt;br&gt;
過去の記憶や経験を思い出しながら、現在の毎日を大切にして、未来を迎えたいと思います。&lt;br&gt;
今後もいいことがたくさんあるように。&lt;/p&gt;

</description><link>http://viewse.blogspot.com/2018/12/2018_28.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-3807725417776750709</guid><pubDate>Tue, 27 Jun 2017 06:32:00 +0000</pubDate><atom:updated>2017-06-27T15:32:45.072+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Linux</category><title>CentOS Pamでケルベロス認証 グループ制限</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;html&gt;
&lt;head&gt;


&lt;title&gt;CentOS Pamでケルベロス認証 グループ制限&lt;/title&gt;
&lt;link href=&quot;https://stackedit.io/res-min/themes/base.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;
&lt;script src=&quot;https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;Pamでケルベロス認証のための設定をメモしておきます。 &lt;br /&gt;
グループでログイン制御することもできます。&lt;br /&gt;


参考情報 &lt;br /&gt;
&lt;a href=&quot;https://www.linux.iastate.edu/content/using-pam-kerberos-authentication-and-group-access-control&quot;&gt;https://www.linux.iastate.edu/content/using-pam-kerberos-authentication-and-group-access-control&lt;/a&gt;&lt;br /&gt;


/etc/pam.d/system-authのサンプル &lt;br /&gt;
testgroup以外のユーザーはログインできないようにする&lt;br /&gt;




&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs avrasm&quot;&gt;&lt;span class=&quot;hljs-preprocessor&quot;&gt;#%PAM-1.0&lt;/span&gt;
&lt;span class=&quot;hljs-preprocessor&quot;&gt;# This file is auto-generated.&lt;/span&gt;
&lt;span class=&quot;hljs-preprocessor&quot;&gt;# User changes will be destroyed the next time authconfig is run.&lt;/span&gt;
auth        required      pam_env&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt;
auth        sufficient    pam_unix&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt; nullok try_first_pass
&lt;span class=&quot;hljs-preprocessor&quot;&gt;# only allow auth for member of testgroup&lt;/span&gt;
auth        requisite    pam_succeed_if&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt; user ingroup testgroup
auth        requisite     pam_succeed_if&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt; uid &amp;gt;= &lt;span class=&quot;hljs-number&quot;&gt;500&lt;/span&gt; quiet
&lt;span class=&quot;hljs-preprocessor&quot;&gt;# for kerberos&lt;/span&gt;
auth        sufficient    pam_krb5&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt; use_first_pass
auth        required      pam_deny&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt;

account     required      pam_unix&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt; broken_shadow
account     sufficient    pam_localuser&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt;
account     sufficient    pam_succeed_if&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt; uid &amp;lt; &lt;span class=&quot;hljs-number&quot;&gt;500&lt;/span&gt; quiet
&lt;span class=&quot;hljs-preprocessor&quot;&gt;# for kerberos&lt;/span&gt;
account     [default=bad success=ok user_unknown=ignore] pam_krb5&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt;
account     required      pam_permit&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt;

password    requisite     pam_cracklib&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt; try_first_pass retry=&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt; type=
password    sufficient    pam_unix&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt; sha512 shadow nullok try_first_pass use_authtok
&lt;span class=&quot;hljs-preprocessor&quot;&gt;# for kerberos&lt;/span&gt;
password    sufficient    pam_krb5&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt; use_authtok
password    required      pam_deny&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt;

session     optional      pam_keyinit&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt; revoke
session     required      pam_limits&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt;
session     [success=&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt; default=ignore] pam_succeed_if&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt; service &lt;span class=&quot;hljs-keyword&quot;&gt;in&lt;/span&gt; crond quiet use_uid
session     required      pam_unix&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt;
&lt;span class=&quot;hljs-preprocessor&quot;&gt;# for kerberos&lt;/span&gt;
session     optional      pam_krb5&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
グループ制御ではingroup, notingroupというのがあります。 &lt;br /&gt;
ingroupはグループ内のユーザーしかログインできない &lt;br /&gt;
notingroupはグループに所属していないユーザーしかログインできない。&lt;/body&gt;&lt;/html&gt;
&lt;/div&gt;
</description><link>http://viewse.blogspot.com/2017/06/centos-pam.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-7584707072177970018</guid><pubDate>Thu, 15 Jun 2017 10:17:00 +0000</pubDate><atom:updated>2019-06-08T14:05:45.739+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HIVE</category><title>Hortonworks ODBCでHIVEServerに接続する設定手順</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;html&gt;
&lt;head&gt;


&lt;title&gt;HortonWorks ODBCでHIVEServerに接続する設定手順&lt;/title&gt;
&lt;link href=&quot;https://stackedit.io/res-min/themes/base.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;
&lt;script src=&quot;https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;ODBCでHIVEに接続する手順をメモしておきます。&lt;br /&gt;




&lt;h3 id=&quot;hortonworksサイトからodbcドライバーをダウンロード&quot;&gt;
HortonWorksサイトからODBCドライバーをダウンロード&lt;/h3&gt;
&lt;a href=&quot;https://jp.hortonworks.com/downloads/&quot;&gt;https://jp.hortonworks.com/downloads/&lt;/a&gt; &lt;br /&gt;
 Hortonworks ODBC Driver for Apache Hive (v2.1.7)&lt;br /&gt;


&lt;h3 id=&quot;odbcドライバーをインストール&quot;&gt;
ODBCドライバーをインストール&lt;/h3&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs lasso&quot;&gt; $ sudo rpm &lt;span class=&quot;hljs-attribute&quot;&gt;-ivh&lt;/span&gt; hive&lt;span class=&quot;hljs-attribute&quot;&gt;-odbc&lt;/span&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;-native&lt;/span&gt;&lt;span class=&quot;hljs-subst&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;hljs-number&quot;&gt;2.1&lt;/span&gt;&lt;span class=&quot;hljs-number&quot;&gt;.7&lt;/span&gt;&lt;span class=&quot;hljs-number&quot;&gt;.1010&lt;/span&gt;&lt;span class=&quot;hljs-subst&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;hljs-number&quot;&gt;1.&lt;/span&gt;el6&lt;span class=&quot;hljs-built_in&quot;&gt;.&lt;/span&gt;x86_64&lt;span class=&quot;hljs-built_in&quot;&gt;.&lt;/span&gt;rpm

 インストール先確認
 $ ls /usr/lib/hive/lib/native&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;odbciniを作成&quot;&gt;
.odbc.iniを作成&lt;/h3&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs avrasm&quot;&gt; $ cd /usr/lib/hive/lib/native/Linux-amd64-&lt;span class=&quot;hljs-number&quot;&gt;64&lt;/span&gt;
 $ cat &lt;span class=&quot;hljs-preprocessor&quot;&gt;.odbc&lt;/span&gt;&lt;span class=&quot;hljs-preprocessor&quot;&gt;.ini&lt;/span&gt;
 ---------------------------------------------------------------
 [ODBC]

 [ODBC Data Sources]
 HIVE

 [HIVE]
 Driver=/usr/lib/hive/lib/native/Linux-amd64-&lt;span class=&quot;hljs-number&quot;&gt;64&lt;/span&gt;/libhortonworkshiveodbc64&lt;span class=&quot;hljs-preprocessor&quot;&gt;.so&lt;/span&gt;
 &lt;span class=&quot;hljs-preprocessor&quot;&gt;#環境ごとに変更&lt;/span&gt;
 HOST=srv&lt;span class=&quot;hljs-preprocessor&quot;&gt;.example&lt;/span&gt;&lt;span class=&quot;hljs-preprocessor&quot;&gt;.com&lt;/span&gt;
 PORT=&lt;span class=&quot;hljs-number&quot;&gt;10000&lt;/span&gt;
 Schema=&lt;db name=&quot;&quot;&gt;
 ServiceDiscoveryMode=&lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;
 ZKNamespace=
 HiveServerType=&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;
 &lt;span class=&quot;hljs-preprocessor&quot;&gt;#kerberos認証にするため、AuthMechを1に設定&lt;/span&gt;
 AuthMech=&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;
 ThriftTransport=&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;
 UseNativeQuery=&lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;
 UID=hue
 &lt;span class=&quot;hljs-preprocessor&quot;&gt;#環境ごとに変更&lt;/span&gt;
 KrbHostFQDN=srv&lt;span class=&quot;hljs-preprocessor&quot;&gt;.example&lt;/span&gt;&lt;span class=&quot;hljs-preprocessor&quot;&gt;.com&lt;/span&gt;
 KrbServiceName=hive
 &lt;span class=&quot;hljs-preprocessor&quot;&gt;#環境ごとに変更&lt;/span&gt;
 KrbRealm=example&lt;span class=&quot;hljs-preprocessor&quot;&gt;.com&lt;/span&gt;
 SSL=&lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;
 TwoWaySSL=&lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;
 ClientCert=
 ClientPrivateKey=
 ClientPrivateKeyPassword=
 ---------------------------------------------------------------
 権限変更、しないとエラーが出る可能性があります。
 $ chmod &lt;span class=&quot;hljs-number&quot;&gt;777&lt;/span&gt; &lt;span class=&quot;hljs-preprocessor&quot;&gt;.odbc&lt;/span&gt;&lt;span class=&quot;hljs-preprocessor&quot;&gt;.ini&lt;/span&gt;&lt;/db&gt;&lt;/code&gt;&lt;/pre&gt;
サンプルファイルは以下にあります。&lt;br /&gt;


&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs vbnet&quot;&gt; /usr/&lt;span class=&quot;hljs-keyword&quot;&gt;lib&lt;/span&gt;/hive/&lt;span class=&quot;hljs-keyword&quot;&gt;lib&lt;/span&gt;/native/hiveodbc/Setup/odbc.ini&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;環境変数設定&quot;&gt;
環境変数設定&lt;/h3&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs ruby&quot;&gt;xport &lt;span class=&quot;hljs-constant&quot;&gt;ODBCINI&lt;/span&gt;=&lt;span class=&quot;hljs-regexp&quot;&gt;/usr/lib&lt;/span&gt;&lt;span class=&quot;hljs-regexp&quot;&gt;/hive/lib&lt;/span&gt;&lt;span class=&quot;hljs-regexp&quot;&gt;/native/&lt;/span&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Linux&lt;/span&gt;-amd64-&lt;span class=&quot;hljs-number&quot;&gt;64&lt;/span&gt;/.odbc.ini
 &lt;span class=&quot;hljs-keyword&quot;&gt;or&lt;/span&gt;
/etc/profileにexport &lt;span class=&quot;hljs-constant&quot;&gt;ODBCINI&lt;/span&gt;=&lt;span class=&quot;hljs-regexp&quot;&gt;/usr/lib&lt;/span&gt;&lt;span class=&quot;hljs-regexp&quot;&gt;/hive/lib&lt;/span&gt;&lt;span class=&quot;hljs-regexp&quot;&gt;/native/&lt;/span&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Linux&lt;/span&gt;-amd64-&lt;span class=&quot;hljs-number&quot;&gt;64&lt;/span&gt;/.odbc.ini　を追加&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;参考kerberos設定&quot;&gt;
参考Kerberos設定&lt;/h3&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs ruby&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$ &lt;/span&gt;cat /etc/krb5.conf
&lt;span class=&quot;hljs-comment&quot;&gt;# Configuration snippets may be placed in this directory as well&lt;/span&gt;
&lt;span class=&quot;hljs-comment&quot;&gt;#includedir /etc/krb5.conf.d/&lt;/span&gt;

[logging]
 default = &lt;span class=&quot;hljs-constant&quot;&gt;FILE&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:/var/log/krb5libs&lt;/span&gt;.log
 kdc = &lt;span class=&quot;hljs-constant&quot;&gt;FILE&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:/var/log/krb5kdc&lt;/span&gt;.log
 admin_server = &lt;span class=&quot;hljs-constant&quot;&gt;FILE&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:/var/log/kadmind&lt;/span&gt;.log

[libdefaults]
 default_realm = &lt;span class=&quot;hljs-constant&quot;&gt;EXAMPLE&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;COM&lt;/span&gt;
 dns_lookup_realm = &lt;span class=&quot;hljs-keyword&quot;&gt;false&lt;/span&gt;
 dns_lookup_kdc = &lt;span class=&quot;hljs-keyword&quot;&gt;false&lt;/span&gt;
 ticket_lifetime = &lt;span class=&quot;hljs-number&quot;&gt;30&lt;/span&gt;d
 renew_lifetime = &lt;span class=&quot;hljs-number&quot;&gt;7&lt;/span&gt;d
 forwardable = &lt;span class=&quot;hljs-keyword&quot;&gt;true&lt;/span&gt;

&lt;span class=&quot;hljs-comment&quot;&gt;# for One-Way Trust with Active Directory&lt;/span&gt;
 permitted_enctypes   = des-cbc-crc des-cbc-md5 arcfour-hmac aes128-cts-hmac-sha1-&lt;span class=&quot;hljs-number&quot;&gt;96&lt;/span&gt; aes256-cts-hmac-sha1-&lt;span class=&quot;hljs-number&quot;&gt;96&lt;/span&gt;
 udp_preference_limit = &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;

[realms]
 &lt;span class=&quot;hljs-constant&quot;&gt;EXAMPLE&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;COM&lt;/span&gt; = {
  kdc = &lt;ip class=&quot;hljs-keyword&quot; span=&quot;&quot;&gt;or&lt;/ip&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/body&gt;&lt;/html&gt; hostname&amp;gt;
  admin_server = &lt;ip class=&quot;hljs-keyword&quot; span=&quot;&quot;&gt;or&lt;/ip&gt; hostname&amp;gt;
 }

[domain_realm]
 .example.com = &lt;span class=&quot;hljs-constant&quot;&gt;EXAMPLE&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;COM&lt;/span&gt;
 example.com = &lt;span class=&quot;hljs-constant&quot;&gt;EXAMPLE&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;COM&lt;/span&gt;

&lt;br /&gt;
&lt;h3 id=&quot;error&quot;&gt;
ERROR&lt;/h3&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs markdown&quot;&gt;Traceback (most recent call last):
  File &quot;&lt;span class=&quot;xml&quot;&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-title&quot;&gt;stdin&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&quot;, line 4, in &lt;span class=&quot;xml&quot;&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-title&quot;&gt;module&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
  File &quot;/tmp/hound/hound/tbx/hoover/&lt;span class=&quot;hljs-emphasis&quot;&gt;_hoover_&lt;/span&gt;price.py&quot;, line 75, in fetch&lt;span class=&quot;hljs-emphasis&quot;&gt;_hoover_&lt;/span&gt;price
&lt;span class=&quot;hljs-code&quot;&gt;    verbose=verbose&lt;/span&gt;
  File &quot;/tmp/hound/hound/tbx/odbc/_odbc.py&quot;, line 55, in execute
&lt;span class=&quot;hljs-code&quot;&gt;    autocommit=True&lt;/span&gt;
pyodbc.Error: (&#39;08001&#39;, &#39;[&lt;span class=&quot;hljs-link_label&quot;&gt;08001&lt;/span&gt;] [&lt;span class=&quot;hljs-link_label&quot;&gt;unixODBC&lt;/span&gt;][&lt;span class=&quot;hljs-link_reference&quot;&gt;Hortonworks&lt;/span&gt;][&lt;span class=&quot;hljs-link_label&quot;&gt;ODBC&lt;/span&gt;] (10380) Unable to establish a connection with data source. Missing settings: {[Host] [Port]} (10380) (SQLDriverConnect)&#39;)&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;解決 &lt;br /&gt;
.odbc.iniファイルの権限を見直す　777にするとか&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</description><link>http://viewse.blogspot.com/2017/06/hortonworks-odbchiveserver.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-4278378778171082812</guid><pubDate>Tue, 14 Feb 2017 03:38:00 +0000</pubDate><atom:updated>2017-06-20T19:07:30.363+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Jupyter</category><title>Mac Juypter インストール時にエラー [Errno 1] Operation not permitted</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;html&gt;
&lt;head&gt;


&lt;title&gt;Mac Juypter インストール時にエラー [Errno 1] Operation not permitted&lt;/title&gt;
&lt;link href=&quot;https://stackedit.io/res-min/themes/base.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;
&lt;script src=&quot;https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;Mac にJuypterをインストールしようとすると、以下のようなエラーが発生しました。&lt;br /&gt;




&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs bash&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;sudo&lt;/span&gt; pip install jupyter&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs livecodeserver&quot;&gt;Exception:
Traceback (most recent call &lt;span class=&quot;hljs-keyword&quot;&gt;last&lt;/span&gt;):
  File &lt;span class=&quot;hljs-string&quot;&gt;&quot;/Library/Python/2.7/site-packages/pip/basecommand.py&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-built_in&quot;&gt;line&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;215&lt;/span&gt;, &lt;span class=&quot;hljs-operator&quot;&gt;in&lt;/span&gt; main
    status = self.run(options, args)
  File &lt;span class=&quot;hljs-string&quot;&gt;&quot;/Library/Python/2.7/site-packages/pip/commands/install.py&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-built_in&quot;&gt;line&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;342&lt;/span&gt;, &lt;span class=&quot;hljs-operator&quot;&gt;in&lt;/span&gt; run
    prefix=options.prefix_path,
  File &lt;span class=&quot;hljs-string&quot;&gt;&quot;/Library/Python/2.7/site-packages/pip/req/req_set.py&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-built_in&quot;&gt;line&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;778&lt;/span&gt;, &lt;span class=&quot;hljs-operator&quot;&gt;in&lt;/span&gt; install
    requirement.uninstall(auto_confirm=True)
  File &lt;span class=&quot;hljs-string&quot;&gt;&quot;/Library/Python/2.7/site-packages/pip/req/req_install.py&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-built_in&quot;&gt;line&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;754&lt;/span&gt;, &lt;span class=&quot;hljs-operator&quot;&gt;in&lt;/span&gt; uninstall
    paths_to_remove.remove(auto_confirm)
  File &lt;span class=&quot;hljs-string&quot;&gt;&quot;/Library/Python/2.7/site-packages/pip/req/req_uninstall.py&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-built_in&quot;&gt;line&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;115&lt;/span&gt;, &lt;span class=&quot;hljs-operator&quot;&gt;in&lt;/span&gt; remove
    renames(path, new_path)
  File &lt;span class=&quot;hljs-string&quot;&gt;&quot;/Library/Python/2.7/site-packages/pip/utils/__init__.py&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-built_in&quot;&gt;line&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;267&lt;/span&gt;, &lt;span class=&quot;hljs-operator&quot;&gt;in&lt;/span&gt; renames
    shutil.move(old, &lt;span class=&quot;hljs-built_in&quot;&gt;new&lt;/span&gt;)
  File &lt;span class=&quot;hljs-string&quot;&gt;&quot;/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-built_in&quot;&gt;line&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;299&lt;/span&gt;, &lt;span class=&quot;hljs-operator&quot;&gt;in&lt;/span&gt; move
    copytree(src, real_dst, symlinks=True)
  File &lt;span class=&quot;hljs-string&quot;&gt;&quot;/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-built_in&quot;&gt;line&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;208&lt;/span&gt;, &lt;span class=&quot;hljs-operator&quot;&gt;in&lt;/span&gt; copytree
    raise Error, errors
Error: [(&lt;span class=&quot;hljs-string&quot;&gt;&#39;/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&#39;/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&quot;[Errno 1] Operation not permitted: &#39;/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py&#39;&quot;&lt;/span&gt;), (&lt;span class=&quot;hljs-string&quot;&gt;&#39;/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&#39;/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&quot;[Errno 1] Operation not permitted: &#39;/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc&#39;&quot;&lt;/span&gt;), (&lt;span class=&quot;hljs-string&quot;&gt;&#39;/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&#39;/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&quot;[Errno 1] Operation not permitted: &#39;/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py&#39;&quot;&lt;/span&gt;), (&lt;span class=&quot;hljs-string&quot;&gt;&#39;/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&#39;/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&quot;[Errno 1] Operation not permitted: &#39;/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc&#39;&quot;&lt;/span&gt;), (&lt;span class=&quot;hljs-string&quot;&gt;&#39;/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&#39;/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&quot;[Errno 1] Operation not permitted: &#39;/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib&#39;&quot;&lt;/span&gt;)]&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;解決&quot;&gt;
解決&lt;/h3&gt;
python 再度インストール&lt;br /&gt;


&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs mel&quot;&gt;brew reinstall &lt;span class=&quot;hljs-keyword&quot;&gt;python&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
再度実行で成功&lt;/body&gt;&lt;/html&gt;
&lt;/div&gt;
</description><link>http://viewse.blogspot.com/2017/02/mac-juypter-errno-1-operation-not.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-6913547308277404645</guid><pubDate>Sun, 12 Feb 2017 03:52:00 +0000</pubDate><atom:updated>2019-06-08T14:04:48.063+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AWS</category><category domain="http://www.blogger.com/atom/ns#">Lambda</category><title>AWS Lambda RDSにデータをInsertするとError発生時にアラート通知</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;html&gt;
&lt;head&gt;


&lt;title&gt;AWS Lambda RDSにデータをInsertするとError発生時にアラート通知&lt;/title&gt;
&lt;link href=&quot;https://stackedit.io/res-min/themes/base.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;
&lt;script src=&quot;https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;AWS　LambdaでRDSにデータをインサートする処理を実現しています。 &lt;br /&gt;
正しくインサートするときに何もしなく、そのまま終了、 &lt;br /&gt;
インサートするときにエラーが発生した場合は、Alertメールで通知したい。&lt;br /&gt;




&lt;h3 id=&quot;sample-code&quot;&gt;
Sample Code&lt;/h3&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs javascript&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; mysql = &lt;span class=&quot;hljs-built_in&quot;&gt;require&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&#39;mysql&#39;&lt;/span&gt;);
exports.handler = &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(event,context,callback)&lt;/span&gt;{&lt;/span&gt;
    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; No = event.No
    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; Birth = event.Birth
    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; Email = event.Email
    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; Name = event.Name

    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt;(No == &lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt; || Birth == &lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt; || Email == &lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt; || Name == &lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt;){
        context.done(&lt;span class=&quot;hljs-string&quot;&gt;&#39;FAILED&#39;&lt;/span&gt;);
    }

    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; connection = mysql.createConnection({
      host     : &lt;span class=&quot;hljs-string&quot;&gt;&#39;rds endpoint url&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-comment&quot;&gt;//RDSのエンドポイント&lt;/span&gt;
      user     : &lt;span class=&quot;hljs-string&quot;&gt;&#39;root&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-comment&quot;&gt;//MySQLのユーザ名&lt;/span&gt;
      password : &lt;span class=&quot;hljs-string&quot;&gt;&#39;password&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-comment&quot;&gt;//MySQLのパスワード&lt;/span&gt;
      database : &lt;span class=&quot;hljs-string&quot;&gt;&#39;db&#39;&lt;/span&gt;
    });

    connection.connect();

    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; insert_sql = &lt;span class=&quot;hljs-string&quot;&gt;&quot;insert into User (No, Birth, Email, Name) value (&#39;&quot;&lt;/span&gt; + No + &lt;span class=&quot;hljs-string&quot;&gt;&quot;&#39;,&#39;&quot;&lt;/span&gt; + Birth +&lt;span class=&quot;hljs-string&quot;&gt;&quot;&#39;,&#39;&quot;&lt;/span&gt; + Email +&lt;span class=&quot;hljs-string&quot;&gt;&quot;&#39;,&#39;&quot;&lt;/span&gt; + Name + &lt;span class=&quot;hljs-string&quot;&gt;&quot;&#39;)&quot;&lt;/span&gt;
    connection.query(insert_sql, &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(err, rows, fields)&lt;/span&gt; {&lt;/span&gt;
      &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (err)
      {
        console.log(&lt;span class=&quot;hljs-string&quot;&gt;&quot;--err&quot;&lt;/span&gt;);
        console.log(err);
        callback(&lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-built_in&quot;&gt;Error&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;FAILED&quot;&lt;/span&gt;));
      }
    });

    connection.end(&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(err)&lt;/span&gt; {&lt;/span&gt;
        context.done(&lt;span class=&quot;hljs-string&quot;&gt;&#39;SUCCESSED&#39;&lt;/span&gt;);  
    });
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;lambdaモニタリング設定&quot;&gt;
Lambdaモニタリング設定&lt;/h3&gt;
「Lambda　⇒　「関数」　⇒　「モニタリング」タブで【呼び出しエラー】というものがあります。 &lt;br /&gt;
&lt;img alt=&quot;monitoring&quot; src=&quot;https://lh3.googleusercontent.com/IcDlX3TNeqUGCVaLJImXn0o0uqL3pg0eqiB2v_8gqwlOD184w6zRPtfwKXQISdse8OIA9CUh9p-EPNcF0BltPN1b2pHA6_Z_W0Bkqci4pisJWzEZaxoveDoUmIiNfb2b1UpcudSIAA2kses5DDL2C3Is0iK4DNi6_Sl8eCEC3CXSaAnLCw5V8x3Lsr376H0BHKfShC42KD_pwI1r79VCINdDeqzHgs042P8AJx09n9ix0D0Xd4K73TUqyYwBl3daV0-iIhtzZyioDMjlEf6fetAAYlPViaM9wHzlbGswVCuHF4NqTpPJBFfIB4kqbGUu7a4rHFK72TO0AMITBnRkBRFjpD46R1aMegrty86pNMbaF1uNAe4upxUm0TZCOey-m-5wd43mna1YIH4vZ2maw_jZncIWtvmnoWTCBM-O7Jv2QY6GKWQl2zxguynTOndgUe-5uRRfhtzIbJ0Q71MIXo4vTSUTfn3RBQvzYc49CYOy-3CCrtaHXZOdCFtRbt8C2nbgoF72-Gr1J_4bNtNHY5zOB3D4fFe4ud5lCrhX2c0OCRtzzx_8fiPZC4S72lfs_3F8i0y2-JPsa5zejozjKveR9s7E9ap-vI4z6mbuvppgexnG5A0H=w3200-h1210-no&quot; title=&quot;&quot; /&gt;&lt;br /&gt;


これを設定すればエラー発生したら、設定したメールアドレスにメールが飛びます。&lt;br /&gt;


&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs fix&quot;&gt;&lt;span class=&quot;hljs-attribute&quot;&gt;エラー（Errors)
が&amp;gt;&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot;&gt;1
を1回連続した場合

間隔：5分間
統計：Standard
などの値を設定し、通知の送信先を選択する。&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;img alt=&quot;alert&quot; src=&quot;https://lh3.googleusercontent.com/KWOrp4PIspL2qY5RF7sTORG02XD0yo5vCY4mT8ZUE1iiEin4ulhZILlLctKTU3vP-TdXXXfAnRIC56elZfxy2S1ZDGGLRqKhaUPwN8Bt_FGgqEXN13jVsFwI7SnRiE_yeaJKdQMpRJ18gi9PGcKuRyalNxAla-hm8D3-4BxZqqeQT_YhgQXjAh_Ev6LRHYEdlICkJNdO3VmyJo-iiWcEaojGiv0Ef_A_Ww6_2eYqz7nXlcO24kWIwV2fT-gzwKtK4W0Y3IL02-OBG5YduL40m3WvnZ_QBX8LOKylinw-53SCR3Ijc1jBXYXmKtjMk7tt4ytCawqSJumT8SCAYWlwuJ_A5gIm7aArystrMQ4VRK-VKi0XEBLSoTV8UfTw5HZug_WU8Pbe2Gjtqt2VEliURU91iegrv-Y6WbGybTuBv0V97QplOdEw8lAK4Jyl0ELtZo5HwQUYcHQUYYI3HaHiNhztri_zOrTEw2CuJ0i_FdiEHHxDQJAYhGCvp2F57AWCJ-_Kmffc1vgKkLr9RtC3B3sHrvugy9of7Et3nQN-66LFJtFPDMHcA1CU4vsi5THltFSuL2_EBlWrWpIwE_iS7JjJbzl-l0F-Jq2qzgQikTdsr4Sf0oZf=w1870-h1972-no&quot; title=&quot;&quot; /&gt;&lt;br /&gt;


これでうまくいくかと思いきゃ、実は成功のときも、エラーが通知されてしまいます。よくないね。いろいろ調べたところ、このエラーは以下の意味を示しています。 &lt;br /&gt;
&lt;a href=&quot;http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/lam-metricscollected.html&quot;&gt;http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/lam-metricscollected.html&lt;/a&gt;&lt;br /&gt;


&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs haml&quot;&gt;-&lt;span class=&quot;ruby&quot;&gt; 処理された例外 (context.fail(error) など)
&lt;/span&gt;-&lt;span class=&quot;ruby&quot;&gt; コードの終了を起こす処理されない例外
&lt;/span&gt;-&lt;span class=&quot;ruby&quot;&gt; メモリ不足例外
&lt;/span&gt;-&lt;span class=&quot;ruby&quot;&gt; タイムアウト
&lt;/span&gt;-&lt;span class=&quot;ruby&quot;&gt; 権限エラー&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;解決&quot;&gt;
解決&lt;/h3&gt;
ソースコードの以下の部分が悪かった。&lt;br /&gt;




&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs lua&quot;&gt; connection.&lt;span class=&quot;hljs-keyword&quot;&gt;end&lt;/span&gt;(&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(err)&lt;/span&gt;&lt;/span&gt; {
        context.done(&lt;span class=&quot;hljs-string&quot;&gt;&#39;SUCCESSED&#39;&lt;/span&gt;);  
    });&lt;/code&gt;&lt;/pre&gt;
これだと、実行後常にエラーメッセージSuccessedで以上終了してしまいます。 &lt;br /&gt;
以下のように変更すれば、正常に終了されます。&lt;br /&gt;




&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs lua&quot;&gt; connection.&lt;span class=&quot;hljs-keyword&quot;&gt;end&lt;/span&gt;(&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(err)&lt;/span&gt;&lt;/span&gt; {
        context.done();  
    });&lt;/code&gt;&lt;/pre&gt;
結構ハマりました。&lt;/body&gt;&lt;/html&gt;
&lt;/div&gt;
</description><link>http://viewse.blogspot.com/2017/02/aws-lambda-rdsinserterror.html</link><author>noreply@blogger.com (Changyao Ye)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/IcDlX3TNeqUGCVaLJImXn0o0uqL3pg0eqiB2v_8gqwlOD184w6zRPtfwKXQISdse8OIA9CUh9p-EPNcF0BltPN1b2pHA6_Z_W0Bkqci4pisJWzEZaxoveDoUmIiNfb2b1UpcudSIAA2kses5DDL2C3Is0iK4DNi6_Sl8eCEC3CXSaAnLCw5V8x3Lsr376H0BHKfShC42KD_pwI1r79VCINdDeqzHgs042P8AJx09n9ix0D0Xd4K73TUqyYwBl3daV0-iIhtzZyioDMjlEf6fetAAYlPViaM9wHzlbGswVCuHF4NqTpPJBFfIB4kqbGUu7a4rHFK72TO0AMITBnRkBRFjpD46R1aMegrty86pNMbaF1uNAe4upxUm0TZCOey-m-5wd43mna1YIH4vZ2maw_jZncIWtvmnoWTCBM-O7Jv2QY6GKWQl2zxguynTOndgUe-5uRRfhtzIbJ0Q71MIXo4vTSUTfn3RBQvzYc49CYOy-3CCrtaHXZOdCFtRbt8C2nbgoF72-Gr1J_4bNtNHY5zOB3D4fFe4ud5lCrhX2c0OCRtzzx_8fiPZC4S72lfs_3F8i0y2-JPsa5zejozjKveR9s7E9ap-vI4z6mbuvppgexnG5A0H=s72-w3200-h1210-c-no" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-7982657232449146403</guid><pubDate>Fri, 03 Feb 2017 05:34:00 +0000</pubDate><atom:updated>2017-06-20T19:06:50.725+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AWS</category><category domain="http://www.blogger.com/atom/ns#">Lambda</category><title>AWS Lambda connect ETIMEDOUT</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;html&gt;
&lt;head&gt;


&lt;title&gt;AWS Lambda connect ETIMEDOUT&lt;/title&gt;
&lt;link href=&quot;https://stackedit.io/res-min/themes/base.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;
&lt;script src=&quot;https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;AWS LambdaでDB接続してデータをインサートするFunctionを書いていて、以下のような　ETIMEDOUTエラーが出力されました。エラーがあったが、処理自体は正常に行われてデータがちゃんとDBに挿入されてます。&lt;br /&gt;


Error&lt;br /&gt;


&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs css&quot;&gt;2017&lt;span class=&quot;hljs-tag&quot;&gt;-02-03T05&lt;/span&gt;&lt;span class=&quot;hljs-pseudo&quot;&gt;:11&lt;/span&gt;&lt;span class=&quot;hljs-pseudo&quot;&gt;:32&lt;/span&gt;&lt;span class=&quot;hljs-class&quot;&gt;.012Z&lt;/span&gt;    &lt;span class=&quot;hljs-tag&quot;&gt;c31fa576-e9cc-11e6-85b4-5dea6b0e5632&lt;/span&gt;    &lt;span class=&quot;hljs-rules&quot;&gt;{ &lt;span class=&quot;hljs-rule&quot;&gt;[&lt;span class=&quot;hljs-attribute&quot;&gt;Error&lt;/span&gt;:&lt;span class=&quot;hljs-value&quot;&gt; connect ETIMEDOUT] errorno: &lt;span class=&quot;hljs-string&quot;&gt;&#39;ETIMEDOUT&#39;&lt;/span&gt;, code: &lt;span class=&quot;hljs-string&quot;&gt;&#39;ETIMEDOUT&#39;&lt;/span&gt;, syscall: &lt;span class=&quot;hljs-string&quot;&gt;&#39;connect&#39;&lt;/span&gt;, fatal: true &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;}&lt;/code&gt;&lt;/pre&gt;
Code&lt;br /&gt;


&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs javascript&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; mysql = &lt;span class=&quot;hljs-built_in&quot;&gt;require&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&#39;mysql&#39;&lt;/span&gt;);
exports.handler = &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(event,context,callback)&lt;/span&gt;{&lt;/span&gt;
    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; No = event.No
    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; Birth = event.Birth
    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; Email = event.Email
    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; Name = event.Name

    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt;(No == &lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt; || Birth == &lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt; || Email == &lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt; || Name == &lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt;){
        context.done(&lt;span class=&quot;hljs-string&quot;&gt;&#39;FAILED&#39;&lt;/span&gt;);
    }

    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; connection = mysql.createConnection({
      host     : &lt;span class=&quot;hljs-string&quot;&gt;&#39;rds endpoint url&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-comment&quot;&gt;//RDSのエンドポイント&lt;/span&gt;
      user     : &lt;span class=&quot;hljs-string&quot;&gt;&#39;root&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-comment&quot;&gt;//MySQLのユーザ名&lt;/span&gt;
      password : &lt;span class=&quot;hljs-string&quot;&gt;&#39;password&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-comment&quot;&gt;//MySQLのパスワード&lt;/span&gt;
      database : &lt;span class=&quot;hljs-string&quot;&gt;&#39;db&#39;&lt;/span&gt;
    });

    connection.connect();

    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; insert_sql = &lt;span class=&quot;hljs-string&quot;&gt;&quot;insert into User (No, Birth, Email, Name) value (&#39;&quot;&lt;/span&gt; + No + &lt;span class=&quot;hljs-string&quot;&gt;&quot;&#39;,&#39;&quot;&lt;/span&gt; + Birth +&lt;span class=&quot;hljs-string&quot;&gt;&quot;&#39;,&#39;&quot;&lt;/span&gt; + Email +&lt;span class=&quot;hljs-string&quot;&gt;&quot;&#39;,&#39;&quot;&lt;/span&gt; + Name + &lt;span class=&quot;hljs-string&quot;&gt;&quot;&#39;)&quot;&lt;/span&gt;
    connection.query(insert_sql, &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(err, rows, fields)&lt;/span&gt; {&lt;/span&gt;
      &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (err)
      {
        console.log(&lt;span class=&quot;hljs-string&quot;&gt;&quot;--err&quot;&lt;/span&gt;);
        console.log(err);
        callback(&lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-built_in&quot;&gt;Error&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;FAILED&quot;&lt;/span&gt;));
      }
    });

    connection.end(&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(err)&lt;/span&gt; {&lt;/span&gt;
        context.done(&lt;span class=&quot;hljs-string&quot;&gt;&#39;SUCCESSED&#39;&lt;/span&gt;);
    });
}
&lt;/code&gt;&lt;/pre&gt;
いろいろ調べたのですが、LambdaのTimeout値を超えたとか、RDSへのアクセス権ないとか、いろいろありました。&lt;br /&gt;


自分の場合は、connection.connect() の一番先頭に持っていたらうまくいった。よくわからんけど。&lt;br /&gt;


以下の様な感じです。&lt;br /&gt;


&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs javascript&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; mysql = &lt;span class=&quot;hljs-built_in&quot;&gt;require&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&#39;mysql&#39;&lt;/span&gt;);
exports.handler = &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(event,context,callback)&lt;/span&gt;{&lt;/span&gt;
    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; connection = mysql.createConnection({
      host     : &lt;span class=&quot;hljs-string&quot;&gt;&#39;rds endpoint url&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-comment&quot;&gt;//RDSのエンドポイント&lt;/span&gt;
      user     : &lt;span class=&quot;hljs-string&quot;&gt;&#39;root&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-comment&quot;&gt;//MySQLのユーザ名&lt;/span&gt;
      password : &lt;span class=&quot;hljs-string&quot;&gt;&#39;password&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-comment&quot;&gt;//MySQLのパスワード&lt;/span&gt;
      database : &lt;span class=&quot;hljs-string&quot;&gt;&#39;db&#39;&lt;/span&gt;
    });

    connection.connect();

    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; No = event.No
    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; Birth = event.Birth
    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; Email = event.Email
    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; Name = event.Name

    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt;(No == &lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt; || Birth == &lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt; || Email == &lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt; || Name == &lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt;){
        context.done(&lt;span class=&quot;hljs-string&quot;&gt;&#39;FAILED&#39;&lt;/span&gt;);
    }

    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; insert_sql = &lt;span class=&quot;hljs-string&quot;&gt;&quot;insert into User (No, Birth, Email, Name) value (&#39;&quot;&lt;/span&gt; + No + &lt;span class=&quot;hljs-string&quot;&gt;&quot;&#39;,&#39;&quot;&lt;/span&gt; + Birth +&lt;span class=&quot;hljs-string&quot;&gt;&quot;&#39;,&#39;&quot;&lt;/span&gt; + Email +&lt;span class=&quot;hljs-string&quot;&gt;&quot;&#39;,&#39;&quot;&lt;/span&gt; + Name + &lt;span class=&quot;hljs-string&quot;&gt;&quot;&#39;)&quot;&lt;/span&gt;
    connection.query(insert_sql, &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(err, rows, fields)&lt;/span&gt; {&lt;/span&gt;
      &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (err)
      {
        console.log(&lt;span class=&quot;hljs-string&quot;&gt;&quot;--err&quot;&lt;/span&gt;);
        console.log(err);
        callback(&lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-built_in&quot;&gt;Error&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;FAILED&quot;&lt;/span&gt;));
      }
    });

    connection.end(&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(err)&lt;/span&gt; {&lt;/span&gt;
        context.done(&lt;span class=&quot;hljs-string&quot;&gt;&#39;SUCCESSED&#39;&lt;/span&gt;);
    });
}&lt;/code&gt;&lt;/pre&gt;
&lt;/body&gt;&lt;/html&gt;
&lt;/div&gt;
</description><link>http://viewse.blogspot.com/2017/02/aws-lambda-connect-etimedout.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-7366962342670740809</guid><pubDate>Fri, 27 Jan 2017 06:02:00 +0000</pubDate><atom:updated>2017-01-27T15:02:24.426+09:00</atom:updated><title>MatterMost hook executed successfully but returned http reponse 500</title><description>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset=&quot;utf-8&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
&lt;title&gt;MatterMost hook executed successfully but returned http reponse 500&lt;/title&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;https://stackedit.io/res-min/themes/base.css&quot; /&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;&lt;p&gt;Gitlab　オンプレミス版インストールしたので、内蔵されているSlcakのクローン版MatterMostとの連携をしてみました。&lt;/p&gt;

&lt;h2 id=&quot;mattermostを有効にする&quot;&gt;MatterMostを有効にする&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;デフォルトではMatterMostが無効になっているため、有効にする必要がある。&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs vala&quot;&gt;&lt;span class=&quot;hljs-preprocessor&quot;&gt;# vi /etc/gitlab/gitlab.rb&lt;/span&gt;
mattermost_external_url &lt;span class=&quot;hljs-string&quot;&gt;&#39;http://mattermost.test.com&#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Gitlabと違うドメイン名が推奨されてますが、同じドメイン名でポート番号だけ変えればOK。&lt;/p&gt;

&lt;p&gt;例えば &lt;br&gt;
&lt;a href=&quot;http://10.10.100.1:9999&quot;&gt;http://10.10.100.1:9999&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitlabをReconfigure&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs bash&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;sudo&lt;/span&gt; gitlab-ctl reconfigure&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;これでURLからアクセスできるようになる。Teamを作って、招待リングを作って関係者招待すればOK&lt;/p&gt;

&lt;p&gt;参考 &lt;br&gt;
&lt;a href=&quot;https://docs.gitlab.com/omnibus/gitlab-mattermost/&quot;&gt;https://docs.gitlab.com/omnibus/gitlab-mattermost/&lt;/a&gt;&lt;/p&gt;



&lt;h2 id=&quot;gitlabとmattermost連携&quot;&gt;GitlabとMatterMost連携&lt;/h2&gt;

&lt;h3 id=&quot;mattermostでwebhookを有効&quot;&gt;MatterMostでWebHookを有効&lt;/h3&gt;

&lt;p&gt;Teamを右クリック　→　System console　→　Service Settings　以下の項目をTrueにする&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable Incoming Webhooks: true &lt;br&gt;
When true, incoming webhooks will be allowed. To help combat phishing attacks, all posts from webhooks will be labelled by a BOT tag.&lt;/li&gt;
&lt;li&gt;Enable Outgoing Webhooks: true &lt;br&gt;
When true, outgoing webhooks will be allowed.&lt;/li&gt;
&lt;li&gt;Enable Slash Commands: true &lt;br&gt;
    When true, user created slash commands will be allowed.&lt;/li&gt;
&lt;li&gt;Enable Integrations for Admin Only: true &lt;br&gt;
    When true, user created integrations can only be created by admins.&lt;/li&gt;
&lt;li&gt;Enable Overriding Usernames from Webhooks and Slash Commands: true &lt;br&gt;
    When true, webhooks and slash commands will be allowed to change the username they are posting as. Note, combined with allowing icon overriding, this could open users up to phishing attacks.&lt;/li&gt;
&lt;li&gt;Enable Overriding Icon from Webhooks and Slash Commands: true&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;上記項目を有効にしないと、matterMostのIntegration画面が表示されない。&lt;/p&gt;

&lt;h3 id=&quot;チャンネルごとにwebhook用urlを作成&quot;&gt;チャンネルごとにWebHook用URLを作成&lt;/h3&gt;

&lt;p&gt;Teamを右クリック　→　Account Settings   →　Integrations  →　Incoming Webhooks &lt;br&gt;
対応チャネルを選択し、ADDで追加する。URLが表示されます。&lt;/p&gt;

&lt;h3 id=&quot;gitlabでwebhook設定&quot;&gt;GitlabでWebHook設定&lt;/h3&gt;

&lt;p&gt;最初に　Gitlabプロジェクト　→　Settings　→　WebHooks画面でMatterMostのURLを追加したのですが、以下のエラーが表示されます。&lt;/p&gt;

&lt;h4 id=&quot;error&quot;&gt;Error&lt;/h4&gt;



&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs livecodeserver&quot;&gt;hook executed successfully but returned &lt;span class=&quot;hljs-keyword&quot;&gt;http&lt;/span&gt; reponse &lt;span class=&quot;hljs-number&quot;&gt;500&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;色々調べたところ、どうやら、Webhooks画面ではなく、Services画面でSlackを有効にして、MatterMostのWebhook URLとチャンネル名入力してできました。&lt;/p&gt;

&lt;h4 id=&quot;解決&quot;&gt;解決&lt;/h4&gt;



&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs sql&quot;&gt;&lt;span class=&quot;hljs-operator&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;DO&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;create&lt;/span&gt; webhook &lt;span class=&quot;hljs-keyword&quot;&gt;in&lt;/span&gt; Gitlab &lt;span class=&quot;hljs-keyword&quot;&gt;from&lt;/span&gt; Projects Settings &amp;gt; Webhooks page.
&lt;span class=&quot;hljs-keyword&quot;&gt;DO&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;create&lt;/span&gt; webhook &lt;span class=&quot;hljs-keyword&quot;&gt;from&lt;/span&gt; Projects Settings &amp;gt; Services &amp;gt; Slack page&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/body&gt;
&lt;/html&gt;</description><link>http://viewse.blogspot.com/2017/01/mattermost-hook-executed-successfully.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-2072887957506442145</guid><pubDate>Mon, 23 Jan 2017 08:08:00 +0000</pubDate><atom:updated>2017-06-20T19:07:44.628+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AWS</category><title>AWS Create API Gateway　手順</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;html&gt;
&lt;head&gt;


&lt;title&gt;AWS Create API Gateway　手順&lt;/title&gt;
&lt;link href=&quot;https://stackedit.io/res-min/themes/base.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;
&lt;script src=&quot;https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;AWS API Gateway とLambda連携してDBにデータPush用API作成しておりまして、APIGatewayの手順をメモしておきます。&lt;br /&gt;


Lambdaの手順はずいぶん省略されましたが、こちらご参照ください。 &lt;br /&gt;
&lt;a href=&quot;https://viewse.blogspot.jp/2017/01/aws-lambda-process-exited-before.html&quot;&gt;https://viewse.blogspot.jp/2017/01/aws-lambda-process-exited-before.html&lt;/a&gt;&lt;br /&gt;


&lt;ul&gt;
&lt;li&gt;API作成　⇒　新しいAPI,　API名：push-api ⇒　API作成&lt;/li&gt;
&lt;li&gt;リソースの作成　⇒　リソース名：applicant、リソースパス：/applicant　⇒　リソース作成&lt;/li&gt;
&lt;li&gt;メソッドの作成　⇒　Post追加、統合タイプ：Lambda関数、Lambdaリージョン：eu-west-1、Lambda関数（入力）：UpdateApplicantInfo　⇒　保存&lt;/li&gt;
&lt;li&gt;メソッド設定　⇒　メソッドリクエスト、APIキーの必要性：true&lt;/li&gt;
&lt;li&gt;APIデプロイ　⇒　デプロイされるステージ：新しいステージ、ステージ名：v1　⇒　デプロイ&lt;/li&gt;
&lt;li&gt;APIキー作成　⇒　push-api-key&lt;/li&gt;
&lt;li&gt;使用プラン作成　⇒　名前：Usage Plan for push-api v１， スロットリングの有効化：無効、クオータを有効にする：無効　次へ　⇒　APIステージの追加、API：push-api、ステージ：v1、次へ ⇒　APIキーを使用量プランに追加、push－api－key、完了&lt;/li&gt;
&lt;/ul&gt;
大体こんな感じです。&lt;/body&gt;&lt;/html&gt;
&lt;/div&gt;
</description><link>http://viewse.blogspot.com/2017/01/aws-create-api-gateway.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-3117422191491028160</guid><pubDate>Mon, 23 Jan 2017 07:15:00 +0000</pubDate><atom:updated>2019-06-08T14:03:20.320+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AWS</category><title>Terraform Aws RDS parameter group 適用時エラー</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;html&gt;
&lt;head&gt;


&lt;title&gt;Terraform Aws RDS parameter group 適用時エラー&lt;/title&gt;
&lt;link href=&quot;https://stackedit.io/res-min/themes/base.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;
&lt;script src=&quot;https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;TerrafromでAWS RDS作成時にDBパラメーターグループにパラメーターを指定してTerraform apply実行すると以下のエラーが出たりします。&lt;br /&gt;




&lt;h3 id=&quot;sample-tf-file&quot;&gt;
sample .tf file&lt;/h3&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs sql&quot;&gt;# &lt;span class=&quot;hljs-operator&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;Create&lt;/span&gt; parameter &lt;span class=&quot;hljs-keyword&quot;&gt;group&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; mariadb
resource &lt;span class=&quot;hljs-string&quot;&gt;&quot;aws_db_parameter_group&quot;&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;db-pg&quot;&lt;/span&gt; {
    name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;test-mariadb10-1&quot;&lt;/span&gt;
    family = &lt;span class=&quot;hljs-string&quot;&gt;&quot;mariadb10.1&quot;&lt;/span&gt;
    description = &lt;span class=&quot;hljs-string&quot;&gt;&quot;mariadb parameter group for test project&quot;&lt;/span&gt;

    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;character-set-client-handshake&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;0&quot;&lt;/span&gt;
    }
    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;character_set_client&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;utf8&quot;&lt;/span&gt;
    }
    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;character_set_connection&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;utf8&quot;&lt;/span&gt;
    }
    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;character_set_database&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;utf8&quot;&lt;/span&gt;
    }
    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;character_set_results&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;utf8&quot;&lt;/span&gt;
    }
    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;character_set_server&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;utf8&quot;&lt;/span&gt;
    }
    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;log_bin_trust_function_creators&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;1&quot;&lt;/span&gt;
    }
    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;max_allowed_packet&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;10240000&quot;&lt;/span&gt;
    }
    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;skip-character-set-client-handshake&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;1&quot;&lt;/span&gt;
    }
}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;terraform-apply-error&quot;&gt;
terraform apply  error&lt;/h3&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs oxygene&quot;&gt;Error modifying DB Parameter &lt;span class=&quot;hljs-keyword&quot;&gt;Group&lt;/span&gt;: InvalidParameterCombination: cannot use immediate apply &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;method&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;parameter&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;status&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;code&lt;/span&gt;:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;400&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;原因&quot;&gt;
原因&lt;/h3&gt;
DB再起動しないと適用できないパラメータの場合は、すぐ適用できないため、失敗する&lt;br /&gt;




&lt;h3 id=&quot;解決策&quot;&gt;
解決策&lt;/h3&gt;
apply_methodの値をpending-rebootに設定する。デフォルトではImmediateになっている&lt;br /&gt;




&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs sql&quot;&gt;# &lt;span class=&quot;hljs-operator&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;Create&lt;/span&gt; parameter &lt;span class=&quot;hljs-keyword&quot;&gt;group&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; mariadb
resource &lt;span class=&quot;hljs-string&quot;&gt;&quot;aws_db_parameter_group&quot;&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;gmaridb-pg&quot;&lt;/span&gt; {
    name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;test-mariadb10-1&quot;&lt;/span&gt;
    family = &lt;span class=&quot;hljs-string&quot;&gt;&quot;mariadb10.1&quot;&lt;/span&gt;
    description = &lt;span class=&quot;hljs-string&quot;&gt;&quot;mariadb parameter group for test project&quot;&lt;/span&gt;

    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;character-set-client-handshake&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;0&quot;&lt;/span&gt;
        //&lt;span class=&quot;hljs-keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;immediate&lt;/span&gt;
        apply_method = &lt;span class=&quot;hljs-string&quot;&gt;&quot;pending-reboot&quot;&lt;/span&gt; 
    }
    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;character_set_client&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;utf8&quot;&lt;/span&gt;
        apply_method = &lt;span class=&quot;hljs-string&quot;&gt;&quot;pending-reboot&quot;&lt;/span&gt; 
    }
    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;character_set_connection&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;utf8&quot;&lt;/span&gt;
        apply_method = &lt;span class=&quot;hljs-string&quot;&gt;&quot;pending-reboot&quot;&lt;/span&gt; 
    }
    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;character_set_database&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;utf8&quot;&lt;/span&gt;
        apply_method = &lt;span class=&quot;hljs-string&quot;&gt;&quot;pending-reboot&quot;&lt;/span&gt; 
    }
    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;character_set_results&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;utf8&quot;&lt;/span&gt;
        apply_method = &lt;span class=&quot;hljs-string&quot;&gt;&quot;pending-reboot&quot;&lt;/span&gt; 
    }
    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;character_set_server&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;utf8&quot;&lt;/span&gt;
        apply_method = &lt;span class=&quot;hljs-string&quot;&gt;&quot;pending-reboot&quot;&lt;/span&gt; 
    }
    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;log_bin_trust_function_creators&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;1&quot;&lt;/span&gt;
        apply_method = &lt;span class=&quot;hljs-string&quot;&gt;&quot;pending-reboot&quot;&lt;/span&gt; 
    }
    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;max_allowed_packet&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;10240000&quot;&lt;/span&gt;
        apply_method = &lt;span class=&quot;hljs-string&quot;&gt;&quot;pending-reboot&quot;&lt;/span&gt; 
    }
    parameter {
        name = &lt;span class=&quot;hljs-string&quot;&gt;&quot;skip-character-set-client-handshake&quot;&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;value&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;1&quot;&lt;/span&gt;
        apply_method = &lt;span class=&quot;hljs-string&quot;&gt;&quot;pending-reboot&quot;&lt;/span&gt; 
    }
}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/body&gt;&lt;/html&gt;
&lt;/div&gt;
</description><link>http://viewse.blogspot.com/2017/01/terraform-aws-rds-parameter-group.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7866290729910307340.post-3251947615283585549</guid><pubDate>Fri, 20 Jan 2017 06:08:00 +0000</pubDate><atom:updated>2019-06-08T14:04:06.852+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Larabel</category><title>Laravelでファイルの種類を限定してファイルをアップロードする</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;html&gt;
&lt;head&gt;


&lt;title&gt;Laravelでファイルの種類を限定してファイルをアップロードする&lt;/title&gt;
&lt;link href=&quot;https://stackedit.io/res-min/themes/base.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;
&lt;script src=&quot;https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;Laravelでファイルアップロードサイトを作っていて、アップロードできるファイルの種類（画像、エクセルとか）を制限したいと思って、色々調べたのですが、以下のように簡単にできます。&lt;br /&gt;




&lt;h3 id=&quot;form-sample&quot;&gt;
Form sample&lt;/h3&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs handlebars&quot;&gt;&lt;span class=&quot;xml&quot;&gt;{!! Form::open([&#39;class&#39; =&amp;gt; &#39;form-upload&#39;, &#39;url&#39;=&amp;gt;&#39;/upload/submit&#39;,&#39;files&#39;=&amp;gt;true]) !!}

&lt;/span&gt;&lt;span class=&quot;hljs-expression&quot;&gt;{{ &lt;span class=&quot;hljs-variable&quot;&gt;Form&lt;/span&gt;::&lt;span class=&quot;hljs-variable&quot;&gt;label&lt;/span&gt;(&#39;&lt;span class=&quot;hljs-variable&quot;&gt;file&lt;/span&gt;&#39;,&#39;&lt;span class=&quot;hljs-variable&quot;&gt;Upload&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;file.&lt;/span&gt;&#39;,&lt;span class=&quot;hljs-variable&quot;&gt;array&lt;/span&gt;(&#39;&lt;span class=&quot;hljs-variable&quot;&gt;id&lt;/span&gt;&#39;=&amp;gt;&#39;&#39;,&#39;&lt;span class=&quot;hljs-variable&quot;&gt;class&lt;/span&gt;&#39;=&amp;gt;&#39;&#39;)) }}&lt;/span&gt;&lt;span class=&quot;xml&quot;&gt;
    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-title&quot;&gt;div&lt;/span&gt; &lt;span class=&quot;hljs-attribute&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;hljs-value&quot;&gt;&quot;input-group&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;         
        &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-title&quot;&gt;label&lt;/span&gt; &lt;span class=&quot;hljs-attribute&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;hljs-value&quot;&gt;&quot;input-group-btn&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-title&quot;&gt;span&lt;/span&gt; &lt;span class=&quot;hljs-attribute&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;hljs-value&quot;&gt;&quot;btn btn-primary&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
            Select File
            {!! Form::file(&#39;file&#39;, [&#39;style&#39; =&amp;gt; &#39;display: none;&#39;, &#39;accept&#39; =&amp;gt; &#39;.jpg,.jpeg,.png,.gif,.pdf&#39;]) !!}
        &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-title&quot;&gt;span&lt;/span&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-title&quot;&gt;label&lt;/span&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-title&quot;&gt;input&lt;/span&gt; &lt;span class=&quot;hljs-attribute&quot;&gt;style&lt;/span&gt;=&lt;span class=&quot;hljs-value&quot;&gt;&quot;width:350px;&quot;&lt;/span&gt; &lt;span class=&quot;hljs-attribute&quot;&gt;type&lt;/span&gt;=&lt;span class=&quot;hljs-value&quot;&gt;&quot;text&quot;&lt;/span&gt; &lt;span class=&quot;hljs-attribute&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;hljs-value&quot;&gt;&quot;form-control&quot;&lt;/span&gt; &lt;span class=&quot;hljs-attribute&quot;&gt;readonly&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-title&quot;&gt;div&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-title&quot;&gt;br&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;hljs-comment&quot;&gt;&lt;!-- submit buttons --&gt;&lt;/span&gt;
    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-title&quot;&gt;button&lt;/span&gt; &lt;span class=&quot;hljs-attribute&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;hljs-value&quot;&gt;&quot;btn btn-lg btn-primary&quot;&lt;/span&gt; &lt;span class=&quot;hljs-attribute&quot;&gt;type&lt;/span&gt;=&lt;span class=&quot;hljs-value&quot;&gt;&quot;submit&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;Upload&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-title&quot;&gt;button&lt;/span&gt;&amp;gt;&lt;/span&gt;
{!! Form::close() !!}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
以下の一行でファイルの拡張子を指定することで、jpg, jpeg, png, gif, pdfのファイルだけを制御できます&lt;br /&gt;


&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs css&quot;&gt;&lt;span class=&quot;hljs-rules&quot;&gt;{&lt;span class=&quot;hljs-rule&quot;&gt;!! &lt;span class=&quot;hljs-attribute&quot;&gt;Form&lt;/span&gt;:&lt;span class=&quot;hljs-value&quot;&gt;:&lt;span class=&quot;hljs-function&quot;&gt;file(&lt;span class=&quot;hljs-string&quot;&gt;&#39;file&#39;&lt;/span&gt;, [&lt;span class=&quot;hljs-string&quot;&gt;&#39;style&#39;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;hljs-string&quot;&gt;&#39;display: none;&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&#39;accept&#39;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;hljs-string&quot;&gt;&#39;.jpg,.jpeg,.png,.gif,.pdf&#39;&lt;/span&gt;])&lt;/span&gt; !!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;}&lt;/code&gt;&lt;/pre&gt;
実際にブラウザでHTMLソースをみてみたら、Inputに変換されていることがわかります。&lt;br /&gt;




&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs xml&quot;&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-title&quot;&gt;span&lt;/span&gt; &lt;span class=&quot;hljs-attribute&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;hljs-value&quot;&gt;&quot;btn btn-primary&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
    Select file
    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-title&quot;&gt;input&lt;/span&gt; &lt;span class=&quot;hljs-attribute&quot;&gt;style&lt;/span&gt;=&lt;span class=&quot;hljs-value&quot;&gt;&quot;display: none;&quot;&lt;/span&gt; &lt;span class=&quot;hljs-attribute&quot;&gt;accept&lt;/span&gt;=&lt;span class=&quot;hljs-value&quot;&gt;&quot;.jpg,.jpeg,.png,.gif,.pdf&quot;&lt;/span&gt; &lt;span class=&quot;hljs-attribute&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;hljs-value&quot;&gt;&quot;file_1&quot;&lt;/span&gt; &lt;span class=&quot;hljs-attribute&quot;&gt;type&lt;/span&gt;=&lt;span class=&quot;hljs-value&quot;&gt;&quot;file&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-title&quot;&gt;span&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;javascript&quot;&gt;
JavaScript&lt;/h3&gt;
他にJavaScriptでも制御できます。 &lt;br /&gt;
例、Excelファイル（.xls、.xlsx）だけをアップロードできるようにする&lt;br /&gt;


&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot; hljs xml&quot;&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-title&quot;&gt;script&lt;/span&gt; &lt;span class=&quot;hljs-attribute&quot;&gt;type&lt;/span&gt;=&lt;span class=&quot;hljs-value&quot;&gt;&quot;text/javascript&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;javascript&quot;&gt;
&lt;!-- filetype extension --&gt;
    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;SetAccept&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;()&lt;/span&gt; {&lt;/span&gt;
        document.getElementById(&lt;span class=&quot;hljs-string&quot;&gt;&quot;file&quot;&lt;/span&gt;).accept = &lt;span class=&quot;hljs-string&quot;&gt;&quot;application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&quot;&lt;/span&gt;;
    }
    SetAccept();
    &lt;/span&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-title&quot;&gt;script&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
imageだとimage/jpeg, image/gifなどを切り替えてよいです。 &lt;br /&gt;
MIMEタイプ一覧をこちら参照できます。 &lt;br /&gt;
&lt;a href=&quot;http://www.geocities.co.jp/Hollywood/9752/mime.html&quot;&gt;http://www.geocities.co.jp/Hollywood/9752/mime.html&lt;/a&gt;&lt;/body&gt;&lt;/html&gt;
&lt;/div&gt;
</description><link>http://viewse.blogspot.com/2017/01/laravel.html</link><author>noreply@blogger.com (Changyao Ye)</author><thr:total>0</thr:total></item></channel></rss>